例如,输入字符串为AB100FF10
。我需要从字符串中读取100
和10
。我可以使用Java中的任何类/对象吗?
答案 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();
}
}