我有一个字符串
String text="abc19xyz87nag";
我只需要从中获取数字,因此我应用了"\\D+"
正则表达式,如下所示,
String text="abc19xyz87nag";
String[] tks=text.split("\\D+");
但是我在数组的开头看到一个空标记
我怎么能找到另外两个解决方案,如下所示
使用扫描仪
Scanner sc = new Scanner(text).useDelimiter("\\D+");
while(sc.hasNext()) {
System.out.println(sc.nextInt());
}
使用模式和匹配器
Matcher m = Pattern.compile("\\d+").matcher(text);
while (m.find()) {
System.out.println(m.group());
}
那么为什么字符串拆分在开头留下空标记?
我是否需要更改正则表达式以避免它?
任何帮助表示赞赏
答案 0 :(得分:1)
设计决定不要在开头丢弃空字符串。基本原理是split()通常与
等数据一起使用item1, item2, item3
(此处分隔符为',')并且您希望将非空项目保留在其位置。
现在,假设您使用上面的3个项目解析行,其中第一个和最后一个是可选的。如果split会丢弃前导和尾随空字符串,并且你得到2个元素,那么你无法确定输入是什么:
, item2, item3
或
item1, item2
通过仅在末尾丢弃空字符串,您知道每个非空字符串都在其正确的位置。
答案 1 :(得分:0)
你的正则表达式应该像
[^\d]
希望有所帮助
答案 2 :(得分:0)
String s = "smt-ing we want to split");
StringTokenizer st = new StringTokenizer();
while(st.hasMoreTokens()){
System.out.println(st.nextToken());
}
答案 3 :(得分:0)
您可以执行一些验证以删除该空String
。
String text="abc19xyz87nag";
String[] tks=text.split("\\D+");
List<String> numList=new ArrayList<>();
for(String i:tks){
if(!"".equals(i)){
numList.add(i);
}
}