对于我的compsci赋值,我们应该在其中使用整数和字母给我们一个字符串,然后创建一个方法来获取该字符串并将其转换为整数数组,其中包含整数。由于某种原因,我的方法不是向数组添加int,我不确定原因。
对于字符串中给出的LETTERS,我们应该丢弃它们,所以我们有一个只有int值的数组;恩。输入:abs3131afas312数组将具有{3131,312}
这是我的方法:
public static int[] intParse(String a){
int[] array1 = new int[a.length()];
int b = 0;
for(int i = 0; i < a.length(); ++i)
{
int g = a.charAt(i);
if(g == 1 || g == 2 || g == 3 || g == 4 || g == 5 || g == 6 || g == 7 || g == 8 || g == 9 || g == 0)
{
String c;
for(int j = i; j < a.length(); ++j)
{
int k = a.charAt(j);
if(k != 1 && k != 2 && k != 3 && k != 4 && k != 5 && k != 6 && k != 7 && k != 8 && k != 9 && k != 0)
{
c = a.substring(j,k-1);
array1[b] += Integer.parseInt(c);
b++;
j = (a.length());
i = a.charAt(j);
}
else
{
c = a.substring(j,a.length());
array1[b] = Integer.parseInt(c);
j = a.length();
}
}
}
}
return array1;
}
答案 0 :(得分:2)
不是将字符与整数进行比较并使用Integer.parseInt
,而应使用以下非常有用的实用方法:
Character.isDigit(int codepoint)
Character.getNumericValue(int codepoint)
另外,你的逻辑似乎有点粗略。当k
是数字代码点时,您正在尝试解析字符串的其余部分。这似乎与您尝试使用外循环的内容保持一致。
答案 1 :(得分:0)
为您解决的问题:
char g = a.charAt(i);
if(g == '1' || g == '2' || g == '3' || g == '4' || g == '5' || g == '6' || g == '7' || g == '8' || g == '9' || g == '0') {
或更好:
char g = a.charAt(i);
if(g >= '0' && g <= '9') {
您的其他if
也需要修复
char k = a.charAt(j);
if(k < '0' || k > '9') {
答案 2 :(得分:0)
首先,a
是一个字符串,包含ASCII字符而不是整数。字符'1'不等于整数1.它等于'{1'的ASCII值恰好是49。
所以你要做的第一件事就是把那个长期的条件改为:
char c = a.charAt(i);
if (c >= '0' && c <='9')
{
...
}
你应该做的是保留一个字符串(每次遇到一个非数字字符,然后是一个数字字符时,新的字符串,并继续附加c
,直到你找到的字符是非数字。
然后您只需执行Integer.parseInt(yourString)
即可获得整数。
答案 3 :(得分:0)
您可能更喜欢这种方法:
Scanner sc = new Scanner("abs3131afas312");
String match;
while ((match = sc.findInLine("(\\d+)"))!=null) {
// instead of printing it, put it in your array
// or a list (and then convert to array)
System.out.println(Integer.parseInt(match));
}
sc.close();
输出:
3131
312