我在正确打印此字符串时遇到问题。 " 34 + 23 * 15 + -10 // ** =?="。 它存储在一个名为String input的变量中; 我试图将每个不同的变量类型分成不同的标记。 因此,例如,如果我找到整数,我将它们分组,如果我找到符号,我将它们分组。
我检查了2位数的整数。但我在检查XX,XXX,XXXX的整数时遇到问题。意思是不同数字的整数,而不仅仅是两位数
if(Character.isDigit(input.charAt(i)) && Characted.isDigit(input.charAt(i+1)){ //checking for integers
count++;
temp = input.substring(input.charAt(i), input.charAt(i+1));
count = Integer.parseInt(temp);
continue;
}
答案 0 :(得分:2)
你应该看看regular expressions。这是如何从字符串中提取数字的示例:
List<Integer> numbers = new ArrayList<Integer>();
Pattern pattern = Pattern.compile("-?\\d+");
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
numbers.add(Integer.valueOf(matcher.group()));
这甚至适用于负数,如果我没有错误的十进制数字。
答案 1 :(得分:0)
您是否在询问如何编写for
循环?
int j; // Declaration outside for, so the variable persists
for(j = i; Character.isDigit(input.charAt(j)); ++j); // Semicolon to do nothing in the loop, besides increasing j.
if(j > i)
{
count = Integer.parseInt(input.substring(i, j));
continue;
}
我遗漏了count++
因为你无论如何都要覆盖它,不知道你打算在那里做什么。
答案 2 :(得分:0)
这里有几个选项。您可以修改您正在使用的方法。如果你保存到目前为止的数字并执行:
String numberSofar = "";
for(char c : inputString){
if(Character.isDigit(c)
numberSoFar+=c;
else{
digits+= Integer.parseInt(c);
}
}
这样的东西会起作用,但它有一些缺点。这是相当慢的,它很慢(除非你有数百万的数字,但仍然......),这可能无关紧要。
另一种选择是使用正则表达式。
int sum = 0;
Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
sum += Integer.parseInt(matcher.group()));
然而,如果你真的想要获得不是数字的东西,它会变得更复杂(或者你可以做两个循环,只是寻找与你第一次看到的相反的东西。^将允许你这样做。