在Java中字符串分割不起作用?

3

我通过空格来拆分这个字符串:String input = ":-) :) :o) :] :3 :c) :> =] 8) =) :} :^)";(表情符号之间有空格)

结果如下:

:-)?:)?:o)?:]?:3?:c)?:>
=]

8)

=)?:}?:^)

结果中出现了一些奇怪的字符,我不知道为什么,请帮助我。

以下是代码:

fileReader = new BufferedReader(new FileReader("emoticon.txt"));
String line = "";
while ((line = fileReader.readLine()) != null){
    String[] icons = parts[0].split("\\s+");
    ....
}

感谢您提供的建议。
这里有一个表情符号文件:
https://www.dropbox.com/s/6ovz0aupqo1utrx/emoticon.txt


2
请展示您所使用的代码。 - Oliver Charlesworth
我只是使用了 input.split(" "); // 非常简单的方法。 - Hoa Vu
当我通过在代码中输入来拆分这些图标时->它可以工作,但是当我从文件中读取这些字符串时->它无法工作。这是文件https://www.dropbox.com/s/6ovz0aupqo1utrx/emoticon.txt - Hoa Vu
@HoaVu 我更新了我的答案。请检查代码。 - Ashish Aggarwal
4个回答

5
String input = ":-) :) :o) :] :3 :c) :> =] 8) =) :} :^)";
String[] similies = input.split(" ");
for (String simili : similies) {
    System.out.println(simili);
}

这个很好用。 输出:

:-)
:)
:o)
:]
:3
:c)
:>
=]
8)
=)
:}
:^)

如果有任何制表符、换行符或空格需要分割,您可以使用

input.split("\\s+"); 

在你的示例中,还有一些其他字符,如Â和不间断空格,因此你需要显式地处理这些类型的字符。以下是代码:

public static void main(final String[] args) throws Exception {
    BufferedReader fileReader = new BufferedReader(new FileReader("emoticon.txt"));
    String line = "";
    while ((line = fileReader.readLine()) != null) {
        line = line.replaceAll("Â", "");
        line = line.replace("" + ((char) 160), " ");
            System.out.println("line: " + line);
        String[] icons = line.split("\\s+");
        for (String icon : icons) {
            System.out.println(icon);
        }
        System.out.println("=======================");
    }
}

1
它对我不起作用。也许是我的电脑文件有问题。请问我该如何上传它到这里? - Hoa Vu
只需复制并粘贴您在问题中的代码,如果您正在尝试分割此文件并且SO上没有上传任何文件的选项。您可以将其上传到Google文档并在SO上分享路径。 - Ashish Aggarwal

2

它们可能不仅仅是空格字符,可能还包括制表符等。

相反,可以尝试使用空白字符(正则表达式\s)进行分割,而不是仅限于特定的空格字符:

String[] emoticons = input.split("\\s+");

我分析了评论中提到的文件,并发现一些“空格”实际上是具有十进制值为160(十六进制A0)的字符。通过更改分割正则表达式来包括此字符,我能够分割每个表情符号:

String[] emoticons = input.split("[\\s\u00A0]+");

我认为我使用的文件可能有问题。请问我该如何在这里上传它? - Hoa Vu
这个应该可以工作。你在尝试的时候有复制粘贴我的代码吗?你把你的输入粘贴到问题中了吗?如果没有,就把它粘贴进去,并将其格式化为“代码”。 - Bohemian
当我通过将其输入代码来拆分这些图标时->它可以工作,但是当我从文件中读取这些字符串时->它无法工作。这是文件dropbox.com/s/6ovz0aupqo1utrx/emoticon.txt。 - Hoa Vu

1
由于您在输出中看到了换行符,这可能意味着您作为输入的原始字符串除了空格之外还包含换行符、制表符等空白字符。因此,您需要按空格将字符串拆分:
String[] spiltted = input.split("\\s+");

0

你需要传递一个正则表达式。

split

尝试使用

String[] array = input.split("\\s+");

这将在每个字符上拆分。 - Bohemian
1
@nachokk 我尝试在终端中运行你的代码,结果是: :-)?:)?:o)?:]?:3?:c)?:>=]
  1. =)?:}?:^)
- Hoa Vu

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