-
人到中年有点甜
您获得前导空字符串的原因是因为您的定界符(一系列非数字字符)引导字符串。这与以下原因相同:String s = ",";
String[] splitResult = s.split(",");愿意splitResult成为["",""]。每有一个分隔符,即使它在字符串的开头或结尾,也是在分割字符串中的两个标记。如果定界符位于字符串的开头、字符串的末尾,或者如果有两个相邻的定界符(由于贪婪量词,在您的情况下不会发生这种情况,但在上述情况下会发生+)String s = ",,";,那么拆分结果将有空字符串。解决问题的一种简单方法是过滤掉空字符串。您知道它只能出现在输入字符串的前面或后面,所以这不是真正的问题。例如:检查中的第一个和最后一个字符串nums。如果它们是空的,请删除它们。使用正则表达式搜索数字,而不是按非数字拆分。在运行代码之前删除任何前导/尾随非数字。我的 Java 不太流利,但我确信可能有一些更简洁的 Java 习惯用法可以使用您提供的代码来执行此操作。
-
明月笑刀无情
String s = "abcd10efgh20dsd2323sdfsdfsdf";s = s.replaceAll("[aA-zZ]+", ",");if (s.charAt(0) == ',') { s = s.replaceFirst(",", ""); }if (s.charAt(s.length()-1) == ',') { s = s.substring(0, s.length()-1); }String[] nums = s.split(",");System.out.println(s);System.out.println(Arrays.toString(nums));
-
繁华开满天机
String str="abcd10efgh20asdasd30"; str=str.replaceAll("\\D+", ","); System.out.println(str); if(str.startsWith(",")) { str=str.replaceFirst(",",""); } System.out.println(str); System.out.println(Arrays.toString(str.split(",")));
-
FFIVE
为此,我会检查 StringUtils 库: https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html假设这是一个学校项目并且外部库不是一个选项,那么这段代码应该适合你:String s = "abcd10efgh20"; String[] nums = s.split("(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)"); List<String> realnums = new ArrayList<>(); for (int i = 0; i < nums.length; i++) { if (nums[i].matches("-?\\d+(\\.\\d+)?")) { realnums.add(nums[i]); } }realnums 将包含您的数字 ArrayList。基本上,您所做的是在字符串的第一部分找到数字时将其拆分,然后遍历该数组并使用正则表达式来确定数组的每个元素是否为数字。如果是,则将其添加到新的 realnums ArrayList。如果不是,则什么也不做。