Java数据结构从字符串中读取数字内容

时间:2011-07-05 17:37:05

标签: java data-structures

  

可能重复:
  Using Regular Expressions to Extract a Value in Java

例如,输入字符串为AB100FF10。我需要从字符串中读取10010。我可以使用Java中的任何类/对象吗?

4 个答案:

答案 0 :(得分:1)

试试这个

String[] nums = "AB100FF10".split("\\D+");
for (String num : nums) {
    System.out.println(num);
}

除此之外,您可以尝试将字符串传递给类似Scanner

的类
Scanner scan = new Scanner("AB100FF10").useDelimiter("\\D+");
while (scan.hasNextInt()) {
    System.out.println(scan.nextInt());
}

修改:使用\\D代替\\w作为分隔符,正如波西米亚人在他的回答和评论中所建议的那样。

答案 1 :(得分:0)

只需使用split(<non-digits>),就像这样:

String[] numbers = "AB100FF10CCC".replaceAll("(^\\D*|\\D*$)", "").split("\\D+"); // "[100, 10]"

现在numbers包含一系列字符串,这些字符串都保证为数字。您可以使用Integer.parseInt()获取ints

replaceAll("(^\\D*|\\D*$)", "")用于修剪输入字符串正面和背面的非数字,否则split()将为您提供一个空白字符串作为第一个/最后一个元素。它只是使代码更简单,而不是必须特别测试第一个/最后一个。

作为一种方法,它看起来像这样:

public static int[] parseInts(String input) {        
    String[] numbers = input.replaceAll("(^\\D*|\\D*$)", "").split("\\D+");
    int[] result = new int[numbers.length];
    for (int i = 0; i < numbers.length; i++) {
        result[i] = Integer.parseInt(numbers[i]);
    }
    return result;
}

答案 2 :(得分:0)

如果您只想获得整数,可以执行以下操作:

ArrayList<Integer> numbers = new ArrayList<Integer>();
char[] characters = "AB100FF10".toCharArray();
StringBuffer buf = new StringBuffer();
for (int i = 0; i < characters.length; i++) {
     if (Character.isDigit(characters[i])) 
        buf.append(characters[i]);
     else if (buf.length() != 0) {
         numbers.add(Integer.parseInt(buf.toString()));
         buf = new StringBuffer();
     }
}

之后你会有一个数组的数组列表

答案 3 :(得分:0)

我认为模式可能是更好的解决方案,因为与简单的String split()方法相比,模式对象更强大。

例如,以下代码可以解决相同的问题而没有任何异常

Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher(test[0]);
while(m.find()){
  int x = Integer.parseInt( m.group() );
}

但是如果我使用String.split(),则有一个NumberFormatException很难处理。例如,下面的代码无法转义NumberFormatException

for(int i = 0 ; i < test.length; i++){
  String[] numstr= test[i].split("\\D+");
  try{              
    for(int j=0; j<numstr.length;j++){
      if( numstr[j] == null || numstr[j] == ""){
    System.out.println("empty string \n");
      }
      else
       Integer.parseInt(numstr[j]);                 
  }catch(NumberFormatException ie){
      ie.printStackTrace();
  }
}