怎么解析出String中的数字

如何解析出String中的数字

 

                   比如将一串字符串“1 2 3 4 5 6 7 8 9 12 23 456 .....”中的数字解析出来

 

String data = "           123 456 4 5 6 6 8 5 2 2 85 2 5 2 5 2 5 0 5 2          ".trim();
		System.out.println("首位的空格被取消了"+data.trim()+"首位的空格被取消了");
		//统计空格出现次数
		char[] c = data.toCharArray();//将字符串转化为字符数组
		int count = 0;//用以统计空格出现了多少次
		for(char v : c){//循环遍历
			if(' ' == v)//一经发现 加一
				count++;
		}
		//定义输入文本格式
		String messageFormat = "{0,number,integer}";//每一个节点值是{编号,内容,类型}
		for(int i=0; i<count; i++){//开始根据空格数定义格式
			messageFormat += " {"+(i+1)+",number,integer}";
		}
		System.out.println(messageFormat);
		//解析出数字
		Object[] data_values = new MessageFormat(messageFormat).parse(data.trim());
		//遍历数字
		for (Object v : data_values)
			System.out.println(v + "(" + v.getClass().getName() + ")");

 结果:

首位的空格被取消了123 456 4 5 6 6 8 5 2 2 85 2 5 2 5 2 5 0 5 2首位的空格被取消了
{0,number,integer} {1,number,integer} {2,number,integer} {3,number,integer} {4,number,integer} {5,number,integer} {6,number,integer} {7,number,integer} {8,number,integer} {9,number,integer} {10,number,integer} {11,number,integer} {12,number,integer} {13,number,integer} {14,number,integer} {15,number,integer} {16,number,integer} {17,number,integer} {18,number,integer} {19,number,integer}
123(java.lang.Long)
456(java.lang.Long)
4(java.lang.Long)
5(java.lang.Long)
6(java.lang.Long)
6(java.lang.Long)
8(java.lang.Long)
5(java.lang.Long)
2(java.lang.Long)
2(java.lang.Long)
85(java.lang.Long)
2(java.lang.Long)
5(java.lang.Long)
2(java.lang.Long)
5(java.lang.Long)
2(java.lang.Long)
5(java.lang.Long)
0(java.lang.Long)
5(java.lang.Long)
2(java.lang.Long)

 

———————————————————————————————————————————————

 使用MessageFormat可以解析任意自定义格式的string,很方便哦,如:

		String sid = "u1234q5678";
		Object[] values = new MessageFormat("u{0,number,integer}q{1,number,integer}").parse(sid);
		for (Object v : values)
			System.out.println(v + "(" + v.getClass().getName() + ")");

 结果:

1234(java.lang.Long)
5678(java.lang.Long)

 

1 楼 030710314 1 小时前  
为什么不用正则表达式,split(regex)来分词呢?
2 楼 canghailan 14 分钟前  
用正则 (\d+) 就OK了
3 楼 canghailan 11 分钟前  
public static void main(String[] args) {
	String data = "           123 456 4 5 6 6 8 5 2 2 85 2 5 2 5 2 5 0 5 2          ";
	Pattern pattern = Pattern.compile("(\\d+)");
	Matcher matcher = pattern.matcher(data);
	while (matcher.find()) {
		String number = matcher.group(1);
		System.out.println(Integer.parseInt(number));
	}
}