java - 将分数字符串解析为 ArrayList<Integer>

标签 java split integer trim parseint

我正在尝试将一个字符串解析为一个整数数组。该字符串表示一堆游戏分数,然后我想将其拆分为每个玩家分数的数组。我正在使用 splittrim ,然后遍历每个分数并将其放入 ArrayList<Integer> 中使用 Integer.parseInt()

它似乎顺利通过了第一个循环,然后在第二次迭代时崩溃了。这是我的代码和 logCat 文件。我添加了一些 println 语句,以便读者可以看到我正在使用的内容。

代码

 //PARSE SCORES INTO ARRAY
 String scores = result.getScores();

 System.out.println("Scores #1: "+scores);

 scores = scores.replaceAll("[^a-zA-Z0-9]+$", "");

 System.out.println("Scores #2: "+scores);

 String[] stringArray = scores.split(",");

 System.out.println("StringArray Length: "+stringArray.length);

 for(int z = 0; z < stringArray.length; z++)
 {
     System.out.println("String Array "+z+": >"+stringArray[z]+"<");
 }


 ArrayList<Integer> scoresA = new ArrayList<Integer>();
 ArrayList<Integer> scoresB = new ArrayList<Integer>();  

 for(int x = 0; x < stringArray.length-1; x++)
 {
     String[] individualScores = stringArray[x].split("-");

     individualScores[0].trim();
     individualScores[0] = individualScores[0].replaceAll("[^a-zA-Z0-9]+$", "");
     individualScores[1].trim();
     individualScores[1] = individualScores[1].replaceAll("[^a-zA-Z0-9]+$", "");



     int score1 = (Integer) Integer.parseInt(individualScores[0]);
     int score2 = (Integer) Integer.parseInt(individualScores[1]);

     System.out.println("Score1 :"+score1);
     System.out.println("Score2 :"+score2);

     if(team == SelectedTeam.TeamA)
     {
         scoresA.add(score1);
         scoresB.add(score2);
     }
     else
     {
         scoresB.add(score1);
         scoresA.add(score2);
     }
 }

LogCat

08-30 08:12:24.731: I/System.out(31452): Scores #1: 9-4,    9-0,    9-5,    
08-30 08:12:24.734: I/System.out(31452): Scores #2: 9-4,    9-0,    9-5
08-30 08:12:24.734: I/System.out(31452): StringArray Length: 3
08-30 08:12:24.734: I/System.out(31452): String Array 0: >9-4<
08-30 08:12:24.734: I/System.out(31452): String Array 1: >  9-0<
08-30 08:12:24.734: I/System.out(31452): String Array 2: >  9-5<
08-30 08:12:24.734: I/System.out(31452): Score1 :9
08-30 08:12:24.734: I/System.out(31452): Score2 :4
08-30 08:12:24.743: D/AndroidRuntime(31452): Shutting down VM
08-30 08:12:24.743: D/AndroidRuntime(31452): --------- beginning of crash
08-30 08:12:24.754: E/AndroidRuntime(31452): FATAL EXCEPTION: main
08-30 08:12:24.754: E/AndroidRuntime(31452): Process: com.squashbot, PID: 31452
08-30 08:12:24.754: E/AndroidRuntime(31452): java.lang.NumberFormatException: Invalid int: "    9"
08-30 08:12:24.754: E/AndroidRuntime(31452):    at java.lang.Integer.invalidInt(Integer.java:138)
08-30 08:12:24.754: E/AndroidRuntime(31452):    at java.lang.Integer.parse(Integer.java:410)
08-30 08:12:24.754: E/AndroidRuntime(31452):    at java.lang.Integer.parseInt(Integer.java:367)
08-30 08:12:24.754: E/AndroidRuntime(31452):    at java.lang.Integer.parseInt(Integer.java:334)
08-30 08:12:24.754: E/AndroidRuntime(31452):    at tournament_activities.MatchResult.PrepareScreenFromImportedResult(MatchResult.java:450)

line450在哪里

int score1 = (Integer) Integer.parseInt(individualScores[0]);

最佳答案

问题是您在删除非数字字符之前进行了修剪(例如考虑 individualScores[0]_ 5 的情况)。交换两行,像这样:

individualScores[0] = individualScores[0].replaceAll("[^a-zA-Z0-9]+$", "");
individualScores[0] = individualScores[0].trim();

顺便说一句,[^a-zA-Z0-9]+$ 也会保留字母,我不确定您是否想保留它们。您应该使用正则表达式 [^0-9]+$ 只保留数字。

此外,在以下行中:

int score1 = (Integer) Integer.parseInt(individualScores[0]);

转换为 Integer 是无用的:Integer.parseInt返回一个 int

关于java - 将分数字符串解析为 ArrayList<Integer>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32293846/

相关文章:

java - 在 Soap Security Header (Spring WS) 中设置自定义标签

使用 HTTPS 混淆的 Java HTTP 发布 - javax.net.ssl.SSLException : hostname in certificate didn't match

javascript - 正则表达式拆分括号、第一个大写字母和数字

C++ 为什么不提供整数的系统最大大小?

ruby - 能够在 Integer 上调用 to_i 的目的是什么?

java - ListView Filter 过滤正确但显示错误结果

java - 为什么这会在 Java 中编译?

python - 如何使用 python 解析文本文件中的多行?

python - 如何根据Python中的字符拆分字符串列表

format - 如何删除前导零并将数字移到整数变量的最左边