在Java中按单词拆分字符串

5
我该如何将以下单词拆分为数组?这是代码:“That's the code”。
array
0 That
1 s
2 the
3 code

我尝试过类似以下的方法

String str = "That's the code";

        String[] strs = str.split("\\'");
        for (String sstr : strs) {
            System.out.println(sstr);
        }

但是输出结果是:
That
s the code

1
为什么不使用空格进行分割?并且要注意像 ' 这样的特殊字符。 - herohuyongtao
当我们说将一个字符串分割成单词时,我们的意思是将"That's the code"划分为"That's","the"和"code"。 - herohuyongtao
"That's the code" 相当于 "That is the code"。我在比较这两个句子。 - user2095165
@herohuyongtao:我们为什么要这么说?“That's”是由两个单词组成的:Thatis缩写成s - JB Nizet
@JBNizet 这取决于你所说的“单词”的含义。当将“What's”转换成“What is”时,你是正确的。 :) - herohuyongtao
8个回答

17
为了特别地按照空格和撇号进行拆分:

要特别按照空格和撇号进行拆分:

public class Split {
    public static void main(String[] args) {
        String [] tokens = "That's the code".split("[\\s']");
        for(String s:tokens){
            System.out.println(s);
        }
    }
}

或者根据任何非单词字符进行分割:

public class Split {
    public static void main(String[] args) {
        String [] tokens = "That's the code".split("[\\W]");
        for(String s:tokens){
            System.out.println(s);
        }
    }
}

2
"[\W]"和"[\s']"有什么区别?" - user2095165
2
\\W 表示非单词字符,即除了 a-z、A-Z、0-9 以外的任何字符,包括下划线_\\s 表示空格,因此包括制表符、空格、换行符等。如果我在字符串 \\W 中添加圆括号 (),则会在每个圆括号处拆分,但是 \\s 版本不会。 - Kevin Bowersox
@KevinBowersox 感谢您的解释 +1 - Keerthivasan
你知道这个方法的运行时间复杂度吗? - Koogle

5
我找到了最佳解决方案,可以在字符串包含重音字母时按单词拆分:

String[] listeMots = phrase.split("\\P{L}+");

例如,如果您的字符串是:
String phrase = "Salut mon homme, comment ça va aujourd'hui? Ce sera Noël puis Pâques bientôt.";

然后您将获得以下单词(用引号括起来并以逗号分隔,以便清晰显示):

"Salut", "mon", "homme", "comment", "ça", "va", "aujourd", "hui", "Ce", 
"sera", "Noël", "puis", "Pâques", "bientôt".

希望这能帮到你!

4
您可以根据非字符分割:
String str = "That's the code";
String[] splitted = str.split("[\\W]");

对于您的输入,输出将是:
That
s
the
code

1
你可以通过正则表达式进行分割,其中一个字符可能是引号或空格:
String[] strs = str.split("['\\s]");

1
如果您想在非字母字符上进行拆分
String str = "That's the code";
String[] strs = str.split("\\P{Alpha}+");
for (String sstr : strs) {
        System.out.println(sstr);
}

\P{Alpha}匹配任何非字母字符,这被称为POSIX字符,您可以在this link中了解更多信息。 这非常有用。 +表示我们应该在任何连续的这些字符字符串上拆分。

输出将是

That
s
the
code

1
+1 对于 Unicode 版本来说很好,但对于新手来说,这段代码可能不太清晰,所以您可能需要扩展您的答案。 - Pshemo

1
你应该先使用str.replaceAll("'", " ")'替换为" "(空格),然后可以使用str.split(" ")在空格分隔符上拆分字符串。或者你也可以使用正则表达式在'或空格上进行拆分。

0

split使用正则表达式,在正则表达式中,'不是特殊字符,因此您不需要使用\进行转义。要表示空格,可以使用\s(在字符串中需要写成"\\s")。另外,要创建字符集,可以使用“OR”运算符|,例如a|b|c|d,或者只需使用字符类[abcd],其意义与(a|b|c|d)完全相同。

为了简化事情,您可以使用

String[] strs = str.split("'| ");

或者

String[] strs = str.split("'|\\s");//to include all whitespaces

或者

String[] strs = str.split("['\\s]");//equivalent of "'|\\s"

0

在正则表达式中,您可以使用OR

public static void main(String[] args) {
    String str = "That's the code";
        String[] strs = str.split("'|\\s");
        for (String sstr : strs) {
            System.out.println(sstr);
        }
   }

字符串将被单引号(')或空格分割。单引号不需要转义。输出将是:
run:
That
s
the
code
BUILD SUCCESSFUL (total time: 0 seconds)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接