Make-shift字符串布尔值?

问题描述:

我正在尝试为我创建的项目创建一种设置系统,但是我遇到了一些问题。我试图使用一个字符串(考虑到这些设置后来必须保存到文本文件)作为转换布尔值。所以,我需要能够在true和false之间切换这个字符串。我认为以下方法可行,但由于某种原因,它始终设置为true,无论如何。就我所知,这是代码中设置变量的唯一位置。Make-shift字符串布尔值?

我不知道为什么下面的代码不应该工作,我做了彻底的搜索无济于事。

if("true".equals(settings[0])) 
    settings[0] = "false";    //This is *always* skipped 
else if("false".equals(settings[0])) 
    settings[0] = "true";` 

因此,我来​​过这里。

+7

当某些数据是布尔值时,应该使用布尔值。保存为字符串时,将此布尔值转换为字符串。加载时,将字符串转换为布尔值。如果遵循此规则,您的代码将更具可读性,更高效且更健壮。 – 2013-04-08 20:41:15

+1

你是否检查过'settings [0]'实际上包含了什么?这是编译器闪耀的时间:) – Maroun 2013-04-08 20:41:43

+0

只要'settings [0]'是“true”或“false”,这个片段就能正常工作。 'settings'的初始值是多少? – iamnotmaynard 2013-04-08 20:42:44

将字符串转换为bool和反转结果。样品

String[] settings = {"tRue"}; 
boolean settingBool = !Boolean.parseBoolean(settings[0]); 
System.out.println(settingBool); 

输出:

false 
+0

谢谢,这样做而不是我原来的,相当凌乱的方法似乎已经奏效。我不确定为什么,但它仍然是一个解决方案。 – NukeDuck 2013-04-08 20:59:26

一个更好的方法是首先使用布尔值,只有将它们转换为字符串,回来,如果你需要。作为JB Nizet在他的评论中写道,它将使代码更具可读性和可靠性。 在你的情况,那将意味着保持布尔值,而不是字符串:

public static Boolean[] settings = new Boolean[] { Boolean.FALSE, Boolean.TRUE, 
                Boolean.TRUE, BOOLEAN.FALSE }; 

要切换布尔值,使用

settings[0] = !settings[0]; 

要转换为字符串保存设置,使用Boolean#toString,从阅读设置Boolean#valueOf(String)

总结意见:

你检查哪些设置[0]实际上包含?

是的,默认情况下它等于“false”。

设置[0]是否在其他地方更改过?

没有

如果设置[0]是假的,那么你应该期待如果你总是被跳过语句的第一家分店。