Java 如何区分数字和字符串
我有一根绳子Java 如何区分数字和字符串,java,string,integer,Java,String,Integer,我有一根绳子 String s="Raymond scored 2 centuries at an average of 34 in 3 innings."; 我只需要找到字符串中存在的数字之和,而不会遇到任何异常。这里的总和应该是2+34+3=39。如何让编译器理解字符串和整数之间的区别。您应该将输入字符串按空格(或按正则表达式,您的问题不清楚)拆分为字符串的数组,然后遍历该数组。如果Integer.parseInt(token)调用未生成NumberFormatException异常,则它
String s="Raymond scored 2 centuries at an average of 34 in 3 innings.";
我只需要找到字符串中存在的数字之和,而不会遇到任何异常。这里的总和应该是2+34+3=39。如何让编译器理解字符串和整数之间的区别。您应该将输入字符串按空格(或按正则表达式,您的问题不清楚)拆分为
字符串的数组,然后遍历该数组。如果Integer.parseInt(token)
调用未生成NumberFormatException
异常,则它将返回一个整数,您应将其添加到numbers
列表中进行进一步处理(或立即添加到总和)
String inputString=“雷蒙德以3局34分的平均成绩攻入2个世纪。”;
String[]stringArray=inputString.split(“”)//可以更改为任何其他拆分器正则表达式
列表编号=新的ArrayList();
用于(字符串str:sArr){
试一试{
numbers.add(Integer.parseInt(str));//或者可以在此处添加整数和
}捕获(数字格式){
系统输出打印ln(e);
}
}
//使用整数列表执行任何逻辑
您应该使用正则表达式拆分字符串。将在所有非数字字符之间进行拆分。下面是一个示例代码:
String text = "there are 3 ways 2 win 5 games";
String[] numbers = text.split("\\D+");
int sum = 0;
for (String number : numbers) {
try {
sum += Integer.parseInt(number);
} catch (Exception ex) {
//not an integer number
}
}
System.out.println(sum);
有多种方法可以解决你的问题。我假设您只查找整数(否则,每个解决方案可能也适用于查找浮点数)
使用正则表达式
:
public static int sumByRegEx(final String input) {
final Pattern nrPattern = Pattern.compile("\\d+");
final Matcher m = nrPattern.matcher(input);
int sum = 0;
while (m.find()) {
sum += Integer.valueOf(m.group(0));
}
return sum;
}
使用扫描仪
:
public static int sumByScanner(final String input) {
final Scanner scanner = new Scanner(input);
int sum = 0;
while (scanner.hasNext()) {
if (scanner.hasNextInt()) {
sum += scanner.nextInt();
} else {
scanner.next();
}
}
scanner.close();
return sum;
}
使用String
方法:
public static int sumByString(final String input) {
return Stream.of(input.split("\\s+"))
.mapToInt(s -> {
try {
return Integer.valueOf(s);
} catch (final NumberFormatException e) {
return 0;
}
}).sum();
}
所有案例都返回正确的结果(只要null
未通过):
public void sumof extractednumbersfromstring(){
整数和=0;
字符串值=“HJHHHJHJ11111 2SSASAS32SAS6776767SAA4SASA”;
字符串[]num={“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“0”};
for(char c:value.toCharArray())
{
对于(int j=0;j
我认为您应该编写一个不同的函数来检查它是否是一个数字,以及良好做法:
public class SumOfIntegersInString {
public static void main(String[] args) throws ClassNotFoundException {
String s = "Raymond scored 2 centuries at an average of 34 in 3 innings.";
String[] splits= s.split(" ");
System.out.println(splits.length);
int sum = 0;
for (int j=0;j<splits.length;j++){
if (isNumber(splits[j]) == true){
int number = Integer.parseInt(splits[j]);
sum = sum+number;
};
};
System.out.println(sum);
};
public static boolean isNumber(String string) {
try {
Integer.parseInt(string);
} catch (Exception e) {
return false;
}
return true;
}
}
集成安装的公共类{
公共静态void main(字符串[]args)引发ClassNotFoundException{
String s=“雷蒙德在3局中平均得分34分,进了2个世纪。”;
字符串[]splits=s.split(“”);
System.out.println(分割长度);
整数和=0;
对于(int j=0;j无花招:检查每个字符是否为数字,如果是,则解析/添加它
public static void SumString (string s)
{
int sum = 0, length = s.length();
for (int i = 0; i < length; i++)
{
char c = s.charAt(i);
if (Character.isDigit(c))
sum += Integer.parseInt(c);
}
return sum;
}
publicstaticvoidsumstring(字符串s)
{
int sum=0,length=s.length();
for(int i=0;i
编译器理解您告诉他的内容。编写一段代码,从字符串中提取数字,并求和。如果您有特定问题,我们将在此寻求帮助。您必须使用正则表达式(或类似的方法来提取数字)然后解析你找到的数字。就是这样。我需要一段代码,从字符串中提取数字尝试做一些研究,谷歌搜索这会给你很多可以学习的资源。你错了,\d按数字拆分,\d按非数字拆分\d
是\d
的否定(除数字以外的任何内容)如果我的字符串如下所示,您的代码就会出错-string inputString=“Raymond在3局中平均得分34分,得分2个百分制35分。”在这里,您的拆分功能将失败。
public void sumOfExtractedNumbersFromString(){
int sum=0;
String value="hjhhjhhj11111 2ssasasa32sas6767676776767saa4sasas";
String[] num = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "0" };
for(char c : value.toCharArray())
{
for (int j = 0; j < num.length; j++) {
String val=Character.toString(c);
if (val.equals(num[j])) {
sum=sum+Integer.parseInt(val);
}
}
}
System.out.println("Sum"+sum);`
}
public class SumOfIntegersInString {
public static void main(String[] args) throws ClassNotFoundException {
String s = "Raymond scored 2 centuries at an average of 34 in 3 innings.";
String[] splits= s.split(" ");
System.out.println(splits.length);
int sum = 0;
for (int j=0;j<splits.length;j++){
if (isNumber(splits[j]) == true){
int number = Integer.parseInt(splits[j]);
sum = sum+number;
};
};
System.out.println(sum);
};
public static boolean isNumber(String string) {
try {
Integer.parseInt(string);
} catch (Exception e) {
return false;
}
return true;
}
}
public static void SumString (string s)
{
int sum = 0, length = s.length();
for (int i = 0; i < length; i++)
{
char c = s.charAt(i);
if (Character.isDigit(c))
sum += Integer.parseInt(c);
}
return sum;
}
public class MyClass {
public int addition(String str){
String[] splitString = str.split(" ");
// The output of the obove line is given below but now if this string contain
//'centuries12' then we need to split the integer from array of string.
//[Raymond, scored, 2, centuries12, at, an, average, of, 34, in, 3, innings]
String[] splitNumberFromSplitString= str.split("(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)");
// The output of above line is given below this regular exp split the integer
// number from String like 'centuries12'
// [Raymond scored,2,centuries,12, at an average of,34, in , 3, innings]
int sum=0;
for (String number : splitNumberFromSplitString) {
if(StringUtils.isNumeric(number)){
sum += Integer.parseInt(number);
}
}
return sum;
}
public static void main(String args[]) {
String str = "Raymond scored 2 centuries at an average of 34 in 3 innings";
MyClass obj = new MyClass();
int result = obj.addition(str);
System.out.println("Addition of Numbers is:"+ result);
}
}
Addition of Numbers is:39