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

4

4 回答 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("=======================");
    }
}
于 2013-07-08T03:32:05.723 回答
2

它们可能不仅仅是空格字符;它们可能是标签等。

相反,尝试拆分空白字符(正则表达式\s),而不仅仅是专门的空格字符:

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

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

String[] emoticons = input.split("[\\s\u00A0]+");
于 2013-07-08T03:29:17.133 回答
1

由于您在输出中看到换行符,这可能意味着您作为输入的原始字符串可能包含空格,如换行符、制表符等,除了空格。

因此,您需要在空格上拆分字符串:

String[] spiltted = input.split("\\s+");
于 2013-07-08T03:32:16.423 回答
0

你必须传递一个正则表达式。

分裂

尝试

String[] array = input.split("\\s+");
于 2013-07-08T03:29:52.200 回答