2013-07-08 5 views
3

Я разделил эту строку через пробел: String input = ":-) :) :o) :] :3 :c) :> =] 8) =) :} :^)"; (пространство между смайликами)Строка в java не работает?

И результат есть:

:-)?:)?: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

Пожалуйста, покажите код, который вы использовали. –

+0

Я просто использую input.split (""); // очень простой. –

+0

Когда я разделяю этот значок, набрав его в коде -> он работает Но когда я прочитал эти строки из файла -> он не работает. Вот файл https://www.dropbox.com/s/6ovz0aupqo1utrx/emoticon ,txt –

ответ

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

Это прекрасно работает. Выход:

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

и в случае, если есть какие-либо вкладки/перевода строки/пробелы и вы wnat расколоть, в этом случае вы можете использовать

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

в вашем примере есть несколько Charaters являются их как Â и не нарушающие пробелы, поэтому вы должны явно обращаться с этим типом charater. Вот код:

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

Это не работает для меня. Возможно, файл на моем компьютере имеет проблемы. Как загрузить его здесь, пожалуйста? –

+0

Просто скопируйте и вставьте свой код так, как он есть в вашем вопросе, где вы пытаетесь разделить этот файл, и нет возможности загрузить любой файл на SO.You можете либо загрузить в Google документ, либо совместно использовать путь к SO. –

2

Возможно, это не просто символы пробела; они могут быть вкладки и т.д.

Вместо этого, разделите на пробельных символов (регулярных выражений \s), а не только конкретно пространство символов:

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

Я проанализировал файл, упомянутые в комментарий и обнаружили, что некоторые «пробелы» были фактически символами с десятичным значением 160 (hex A0). Изменяя разделяемое регулярное выражение, чтобы включить этот символ, я смог разделить каждый смайлик:

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

Прошу прощения, это не работает. –

+0

Я думаю, может быть файл, который я использовал, имеет проблему. Как я могу загрузить его здесь, пожалуйста? –

+0

Это действительно должно сработать. вы скопировали мой код, когда вы его попробовали? Вы вставляли свой точный ввод в вопрос - если бы не вставить его и не форматировать его как «код» – Bohemian

0

Вы должны принять регулярное выражение.

split

Попробуйте с

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

Fyi Это будет разбито на каждый символ – Bohemian

+0

@Bohemian xD исправлено: D – nachokk

+1

@nachokk Я попытался запустить ваш код в терминале и результат: :-)? :) ?: o) ?:] ?: 3?: C)?:> =] 8) =)?:}?: ^) –

1

Поскольку вы видите новые строки в вашем выводе, это может означать, что исходная строка, которая у вас есть в качестве входных данных может состоять из пробелов, как символ новой строки, закладок и т.д. помимо пространства.

Итак, вам нужно разбить строку на пробельных:

String[] spiltted = input.split("\\s+"); 
Смежные вопросы