Java .split与toLowerCase不兼容

时间:2014-07-31 08:25:02

标签: java split

我想拆分文字。我可以在使用String.split()时执行此操作。例如,我拆分了“Hello world”。我将“Hello”和“world”作为输出。 当我做同样但toLowerCase时,我得到“你好”和“世界”。但我不希望这个点在“世界”之后。 我尝试使用不同的参数进行拆分,并将toLowerCase与.split分开。我试图先拆分然后toLowerCase。什么都行不通。我该怎么做才能消除所有这些,。 ! ?等? 以下是我如何拆分:

predlog = main.toLowerCase().split("\\s+");

4 个答案:

答案 0 :(得分:2)

只保留字母并分开其余部分:

String[] r = main.replaceAll("[^a-zA-Z ]", "").toLowerCase().split("\\s+");

要摆脱所有标点符号并分开其余部分:

String[] r = main.replaceAll("\\p{P}", "").toLowerCase().split("\\s+");

答案 1 :(得分:0)

toLowerCase()对点没有影响。

如果你想要一个简单但有点神秘的修复,也可以分成点:

predlog = main.toLowerCase().split("\\s+|\\.");

这样做的原因是split()会丢弃返回数组的尾随空白。

答案 2 :(得分:0)

也许this answer可以提供帮助。代码:

String s = "Hello world.";
for (String x : s.toLowerCase().split("[\\p{P} \\t\\n\\r]+"))
    System.out.println(x);

打印出来:

> hello
> world

答案 3 :(得分:0)

对不起,但报告的效果无法确认。我已经使用Java 6和Java 7测试了报告的行为,如下所示:

public static void main(String[] args) {
    String helloWorld = "Hello World.";

    String[] splittedHelloWorld = helloWorld.split("\\s+");
    String[] splittedLowerCaseHelloWorld = helloWorld.toLowerCase().split("\\s+");

    boolean splittedHelloWorldContainsDot = checkContainsDot(splittedHelloWorld);
    boolean splittedLowerCaseHelloWorldContainsDot = checkContainsDot(splittedLowerCaseHelloWorld);

    System.out.println(splittedHelloWorldContainsDot); // true
    System.out.println(splittedLowerCaseHelloWorldContainsDot); // true
}

private static boolean checkContainsDot(String[] splittedArray) {
    boolean containsDot = false;

    for (String string : splittedArray) {
        if (string.contains(".")) {
            containsDot = true;
            break;
        }
    }

    return containsDot;
}