Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何区分数字和字符串_Java_String_Integer - Fatal编程技术网

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