2016-10-09 3 views
0

Немного странное, поскольку я проверил его несколько раз и до сих пор не вижу ничего плохого в том, что делаю.Невозможно заменить пустое пространство в String java

Во всяком случае, у меня есть эта строка с именем score, которая является параметром метода. Входной номер "0 - 2", я хотел бы проанализировать эту строку, но прежде чем я должен удалить пробелы. Я пробовал использовать score = score.replaceAll("\\s+", "") и score = score.replace(" ", ""), однако пробелы все еще не заменены. Под этой строкой кода я распечатываю счет, и он все еще отображает строку как "0 - 2" с пробелами, которые не удалены. Любая помощь приветствуется.

Вот код для метода

public static int parseScore(String score, boolean first){ 

    score = score.replaceAll("\\s+",""); // remove white space 
    System.out.println(score); 

    String[] tokens = score.split("-"); 

    if(first == true){ 

     return Integer.parseInt(tokens[0]); 

    }else{ 

     return Integer.parseInt(tokens[1]); 

    } 

} 

Ошибка:

Исключение в потоке "основного" java.lang.NumberFormatException: Для входной строки: "0" в java.lang. NumberFormatException.forInputString (Unknown Source) в java.lang.Integer.parseInt (Unknown Source) в java.lang.Integer.parseInt (Unknown Source) в PredictResult2.parseScore (PredictResult2.java:32) в PredictResult2.m айн (PredictResult2.java:102)

EDIT:

Забыл упомянуть, что строка, которую я использую уже была разобрана из загруженного HTML-страницы. Может ли это иметь к этому какое-нибудь отношение? возможно, другое форматирование символов или что-то еще?

+0

активизировали вас через код в ваш отладчик, чтобы увидеть, что происходит в каждой строке? –

+0

System.out.println (оценка) возвращает «0 - 2». И поэтому, когда строка возвращает Integer.parseInt (токены [0]), она возвращает исключение NumberFormatException. Я буду редактировать в фактической ошибке – user3918443

ответ

0

Ваш вход должен быть неправильным. Ваш код работает хорошо - проверить этот кусок кода:

public static void parseScore(){ 

    String score = "0 - 2"; 
    score = score.replaceAll("\\s+",""); 

    System.out.println(score); 

    String[] tokens = score.split("-"); 

    System.out.println(tokens[0]); 
    System.out.println(tokens[1]); 


    System.out.println(Integer.parseInt(tokens[0])); 
    System.out.println(Integer.parseInt(tokens[1])); 
} 

public static void main(String[] args) { 
    parseScore(); 
} 

Если вы не уверены о входе я предлагаю преобразующей строку в массив символов и печатающего ASCII код каждого символа. Затем сравните вывод с таблицей here.

char[] array = score.toCharArray(); 
    for (char c : array) 
     System.out.print((int)c + " "); 
+0

Привет, спасибо! Да, я думал, это может быть так. Если вы посмотрите на редактирование, которое я только что сделал на этом посту, я считаю, что это может быть связано с каким-то необычным форматированием символов со страницы html, которую я разорвал из Интернета. – user3918443

+0

0 - 2 - вход. Или, по крайней мере, это то, что я скопировал из вывода функции println. Я попробую массив символов и вернусь к вам в любом случае, спасибо! – user3918443

+0

Вот результат массива char: 48 160 45 160 50. ohhh okay, поэтому пространство фактически форматируется как «á». Так я должен попытаться заменить этот символ вместо этого? – user3918443

-1

Если вы считаете, используя гуавы, то это может быть сделано как этот

Splitter.on("-").trimResults().omitEmptyStrings().split(score); 

для получения дополнительной информации https://github.com/google/guava/wiki/StringsExplained

0

Ваш код прекрасно. Он отлично работает, когда я тестировал его, так что это не так. Это должна быть какая-то другая странная проблема.

Но в любом случае, для чего вы пытаетесь достичь, возможно, trim() будет более эффективным и быстрым.

public static int parseScore(String score, boolean first){ 
    String[] tokens = score.split("-"); 
    if(first == true){ 
     return Integer.parseInt(tokens[0].trim()); 
    }else{ 
     return Integer.parseInt(tokens[1].trim()); 

    } 
} 
0

Представляется, что это дело с неразрывными пробелами. Некоторое время назад наткнулся на это и написал себе следующий метод использования. Более подробную информацию можно найти здесь:

Why is non-breaking space not a whitespace character in java?

https://en.wikipedia.org/wiki/Non-breaking_space

/** 
* Trims non-breaking whitespace, too. 
*/ 
public static String trim(String value) { 
    return value.replaceAll("[\\s\\u00A0]+$", ""); 
}