gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 07:39:08 24 4
gpt4 key购买 nike

我正在尝试将一个字符串解析为一个整数数组。该字符串表示一堆游戏分数,然后我想将其拆分为每个玩家分数的数组。我正在使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com