1

我正在编写一个基于 1 个主字符串将子字符串添加到黑色或白色字符串的程序。主串是:牛奶,纸,杯子:,咖啡,可乐,PC

我希望代码将所有字符放在白色字符串中的“:”之前,并将所有字符放在黑色字符串中的“:”之后。

问题在于它将所有项目添加到黑色字符串中,除了一个女巫连接到“:”。所以在这种情况下是“杯子”。

这是我的代码:

String White = "";
String Black = "";
String[] temp = "milk,paper,cup:,coffee,cola,PC".split(",");
int q = 0;
Boolean black = false;
while (q < temp.length) {
    if (temp[q].isEmpty()) {
    } else if (temp[q].contains(":")) {
        String tempWhite = White;
        White = tempWhite + temp[q].replace(":", "") + ",";
        black = true;

    } else if (black = true) {
        String tempBlack = Black;
        Black = tempBlack + temp[q] + ",";
    } else if (black = false) {
        String tempWhite = White;
        White = tempWhite + temp[q] + ",";
    } else if (temp[q].contains(" ")) {
    } else {
        System.out.println(temp[q]);

    }

    q++;
}
System.out.println("White: " + White);
System.out.println("Black: " + Black);

我得到的输出:白色:杯子,黑色:牛奶,纸,咖啡,可乐,PC,

我想要的输出: 白色:牛奶、纸、杯子 黑色:咖啡、可乐、PC

我使脚本可编译以便于检查:)

提前问候和感谢,

布拉姆

4

7 回答 7

5

看来你开始错了:你为什么不先split“:”,然后分析这两个部分?然后,您的整个程序逻辑将折叠成两三行代码。

于 2012-08-20T12:08:01.810 回答
3

怎么样

String[] pairs = "milk,paper,cup:,coffee,cola,PC".split(":");
String white = pairs[0];
String black = pairs[1].substring(1);

寻求解决方案。

于 2012-08-20T12:08:37.433 回答
0
  • 首先, split on :得到两个字符串,一个用于白字符串,一个用于黑字符串。
  • 然后对于两个字符串, split on 以选择每个单独的项目。
  • 使用 (boolean == true) 代替 (boolean = false)
于 2012-08-20T12:14:08.583 回答
0

如果你想把你的字符串作为一部分,你可以使用 split 方法。你可以通过这种方式()分割字符串。split(":") 并将字符串对存储在不同的字符串变量中..仅此而已

于 2012-08-20T12:19:09.100 回答
0

在 ":" 上拆分:[0] 将是 White,[1] Black 。

否则,使用StringBuilder()和方法 .append(..)

于 2012-08-20T12:09:35.950 回答
0

您可以在“:”处轻松拆分主字符串

然后你必须从黑色字符串中删除前导“,”

于 2012-08-20T12:12:07.367 回答
0

显示代码不起作用的主要问题是在 if 条件中错误使用了 =,赋值运算符(实际上,应该使用 ==,比较运算符- 但你甚至不需要完全比较 - 变量black本身是布尔值,因此可以用作条件,例如:

if (black)

如果黑色为真,则执行某事,或

if (!black)

检查黑色当前是否持有该值false

另请注意,在此代码中

if (black) {
     doSomething();
} else if (!black) {
     doSomethingElse();
}

第二个 if 语句 ( if (!black)) 是多余的:black只能有两个值;如果不是真的,那只能是假的!因此,在语义上与上述等效的是:

if (black) {
     doSomething();
} else {
     doSomethingElse();
}

至于您所面临的整体问题的更易于阅读(更好的可维护性,并且更短!)的解决方案,请首先在冒号上使用 split (如其他答案中所述)。

于 2012-08-20T12:19:36.197 回答