从字符串中获取多个int

时间:2013-12-15 19:44:50

标签: java regex string

我有一个字符串:

"3, V, 11, H, 21, H"

我想要

int first = 3
int second = 11
int third = 21

我不确定如何做到这一点,因为数字可能是一个或两个数字,数字之间有非数字字符,我必须捕获多个数字。我试过正则表达式然后我留下了“31121”,这并不表示这三个数字是什么。

4 个答案:

答案 0 :(得分:1)

试试这段代码。应该让你完成工作。

public static void main(String[] args){
    String s = "3, V, 11, H, 21, H";
    String[] t = s.split(" [ ,]*|,[ ,]*");
    int first = Integer.parseInt(t[0]);
    int second = Integer.parseInt(t[2]);
    int third = Integer.parseInt(t[4]);
    System.out.println(first);
    System.out.println(second);
    System.out.println(third);
}

答案 1 :(得分:1)

您可以按","分割字符串,并使用org.apache.commons.lang.math.NumberUtils中的NumberUtils.isNumber (String str)检查字母是否为数字:

  

检查String是否为有效的Java编号。

     

有效数字包括标有0x限定符的十六进制数,   科学记数法和用类型限定符标记的数字(例如   123L)。

     

Null和empty String将返回false。

String s = "3, V, 11, H, 21, H";
for(String st : s.split(",")){
    if(NumberUtils.isNumber(st.trim()))
        System.out.println(st);
}

如果要检查字符串是否只包含数字,可以使用NumberUtils.isDigits(String str)

答案 2 :(得分:1)

public static void main(String[] args) {

    String in = "3, V, 11, H, 21, H";

    List<String> storage = Arrays.asList(in.split(","));
    List<Integer> output = new ArrayList<Integer>();

    int first = 0;
    int second = 0;
    int third = 0; 

    for(String str : storage){
        if(str.trim().matches("[0-9]+") ){ // or if(NumberUtils.isNumber(str) )
            output.add(Integer.parseInt(str.trim()));
        }
    }

    if(output.size() == 3){
         first = output.get(0);
         second = output.get(1);
         third = output.get(2);
    }

    System.out.print("first: "); System.out.println(first);
    System.out.print("second: "); System.out.println(second);
    System.out.print("third: "); System.out.println(third);

}

输出:

first: 3
second: 11
third: 21

答案 3 :(得分:0)

您可以按 , 拆分此字符串,然后检查每个部分是否都是这样的数字:

import java.util.*;
public class HelloWorld{

     public static void main(String []args){
        String str = "3, V, 11, H, 21, H";
        String[] parts = str.split(", ");
        ArrayList<Integer> listNumbers = new ArrayList<Integer>();
        for(String x : parts){
         try{
           listNumbers.add( Integer.parseInt(x) );  
         }
         catch(Exception e){}    
        }

        for(int i=0;i<listNumbers.size();i++) System.out.println("Number "+(i+1)+" : "+listNumbers.get(i));
    }

}