我有一个字符串:
"3, V, 11, H, 21, H"
我想要
int first = 3
int second = 11
int third = 21
我不确定如何做到这一点,因为数字可能是一个或两个数字,数字之间有非数字字符,我必须捕获多个数字。我试过正则表达式然后我留下了“31121”,这并不表示这三个数字是什么。
答案 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));
}
}