在字符串中查找整数的最佳方法是什么?

时间:2015-10-03 19:01:24

标签: java arraylist

Hello StackOverflow社区!我是学生试图解决这个问题.... 我遇到的主要问题是我不知道在字符串中查找有效整数字符的最佳方法。 注意:我只用了1个月学习Java,去年我花了大部分时间学习python。所以编译语言对我来说是新的 编写一个读取产品代码的程序,并根据一些简单的规则输出它是否有效。

规则: 第一部分只能包含大写字母和6位数字。第二部分是alldigits和=从左边开始的两组中的前6位数的乘积。

例如:AX6BYU56UX6CV6BNT7NM 287430 是有效的,因为65 * 66 * 67 = 287430

这是我到目前为止所拥有的

import java.util.*;                       //import java utilities
public class Basic5{                      //declares my class
    public static void main(String[]args){
        Scanner kb=new Scanner(System.in);//creates Scanner for user input
        String userentry=kb.nextLine();   //Takes users input as a string     
        String result="Valid";            //Variable for if the code is Valid
        int DoubleCounter=0;              //Counter for number of ints
        double newdouble;                 
        List<Double> NumberList =  new ArrayList<Double>(); //Creates Array List for tracking Doubles
        for(int i=0;i<userentry.length();i++){              //checks length of Users input
            if(Character.isLowerCase(userentry.codePointAt(i))){  //checks if its a Lowercase letter
                result="Fail";                              //Changes result variable
            if(Integer.parseInt(userentry,i)){              //checks if character from input is a valid integer
                DoubleCounter+=1;                           //Adds to DoubleCounter
                newdouble=userentry.charAt(i);              //Isolates character
                NumberList.add(newdouble);                  //Adds it to List of doubles
            }
            }
        }
    }
}

3 个答案:

答案 0 :(得分:2)

您可以使用以下方法检查输入是字符还是数字:

Character.isDigit('A');
Character.isLetter('A');

答案 1 :(得分:1)

这是一种方法:

@Test
public void testExample() {
    assertTrue(isValid("AX6BYU56UX6CV6BNT7NM 287430"));
    assertFalse(isValid("AX6BYU56UX6CV6BNT7NM 287431"));
}

private boolean isValid(String s) {
    String[] parts = s.split(" ");
    int[] ints = extractIntegers(parts[0]);
    int target = Integer.parseInt(parts[1]);
    return product(ints) == target;
}

private int[] extractIntegers(String s) {
    String digits = s.replaceAll("\\D+", "");
    int[] ints = new int[digits.length() / 2];
    for (int i = 0; i < digits.length(); i += 2) {
        ints[i / 2] = Integer.parseInt(digits.substring(i, i + 2));
    }
    return ints;
}

private int product(int[] ints) {
    int result = 1;
    for (int num : ints) {
        result *= num;
    }
    return result;
}

假设字符串的第一部分中存在非零偶数位数。如果您需要处理其他情况,基于此应该很容易做到。

答案 2 :(得分:1)

String str = "AX6BYU56UX6CV6BNT7NM 287430";      
str = str.replaceAll("[^0-9]+", "");