伙计们......我需要从用户那里获得String
输入并仅添加其numeric values
并忽略letters
。例如,如果用户输入75Number5
,则结果应为80
或800dadsadasdwwfvv0002
,结果应为802
。但我经常得到0
。
import java.util.Scanner;
public class NumberAddition {
public static void main(String[] args)
{
Scanner kbd = new Scanner(System.in);
System.out.println("Enter any String: ");
String myString = kbd.nextLine();
myString = myString.toLowerCase();
int result = 0;
for(int i = 0; i < myString.length(); i++)
{
if(myString.charAt(i) != '1' || myString.charAt(i) != '2' ||
myString.charAt(i) != '3' || myString.charAt(i) != '4' ||
myString.charAt(i) != '5' || myString.charAt(i) != '6' ||
myString.charAt(i) != '7' || myString.charAt(i) != '8' ||
myString.charAt(i) != '9')
result += 0;
else
result += myString.charAt(i);
}
System.out.println("The result is " + result);
}
}
答案 0 :(得分:3)
如果我理解了您的问题,那么您可以使用StringBuilder
来构建仅限数字的String
版本。您可以使用Character.isDigit(char)
来测试该条件。您可以使用增强的for-each
loop来迭代支持String
的char数组
Scanner kbd = new Scanner(System.in);
System.out.println("Enter any String: ");
String myString = kbd.nextLine();
StringBuilder sb = new StringBuilder();
for (char ch : myString.toLowerCase().toCharArray()) {
if (Character.isDigit(ch)) {
sb.append(ch);
}
}
int result = Integer.parseInt(sb.toString());
System.out.println("The result is " + result);
答案 1 :(得分:2)
虽然有一个已接受的答案(并且通过对其进行少量增强来获得OP的理想行为并不困难),但我还是希望使用正则表达式提供另一种选择:
int i = 0;
for (String s : "asdfa800dadsadasdwwfvv0002".split("\\D+")) {
i += (s.isEmpty() ? 0 : Integer.parseInt(s));
}
System.out.println("result : " + i);
简而言之:用非数字字符拆分字符串。将拆分结果的每个部分转换为整数并将它们相加。
如果您使用的是Java 8,则代码可以进一步简化&#34;到:
int sum = Arrays.stream(yourInputString.split("\\D+"))
.filter(s-> !s.isEmpty()).mapToInt(Integer::parseInt).sum();
答案 2 :(得分:0)