Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 分析数字字符串时额外的空字符串_Java_Regex - Fatal编程技术网

Java 分析数字字符串时额外的空字符串

Java 分析数字字符串时额外的空字符串,java,regex,Java,Regex,试图仅从此字符串中获取数字。 “abcd10efgh20” 但是,下面的代码返回一个数组,其中的数字开头是空字符串 [“”、“10”、“20”] String[]nums=s.split(\\D+); System.out.println(Arrays.toString(nums)); 预期[“10”、“20”] [编辑] 我这里的问题是,为什么我在数组的开头得到一个空字符串? 不是 如何使用正则表达式 从字符串中获取数字序列 如何更好地编码 谢谢 为此,我将签出StringUtils库:

试图仅从此字符串中获取数字。 “abcd10efgh20”

但是,下面的代码返回一个数组,其中的数字开头是空字符串

[“”、“10”、“20”]

String[]nums=s.split(\\D+);
System.out.println(Arrays.toString(nums));
预期[“10”、“20”]

[编辑]

我这里的问题是,为什么我在数组的开头得到一个空字符串? 不是

  • 如何使用正则表达式
  • 从字符串中获取数字序列
  • 如何更好地编码

谢谢

为此,我将签出StringUtils库:

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(",")));
假设这是一个学校项目,而外部库不是一个选项,那么此代码应该适合您:

    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]);
        }
    }
String s=“abcd10efgh20”;

String[]nums=s.split((?获取前导空字符串的原因是您的分隔符(一系列非数字字符)在字符串的前导。原因与此相同:

String s = ",";
String[] splitResult = s.split(",");
splitResult
设置为
[“”,“”]
。每当有分隔符时,即使它位于字符串的开头或结尾,也会拆分字符串中的两个标记。如果分隔符位于字符串的开头、结尾,或者如果有两个相邻的分隔符(在您的情况下不会发生这种情况,因为贪婪的
+
量词,但在上述情况下会发生
字符串s=“,”;
),那么分割结果将有空字符串

解决问题的一个简单方法是过滤掉空字符串。您知道它只能出现在输入字符串的前面或后面,因此它不是真正的问题。例如:

  • 检查
    nums
    中的第一个和最后一个字符串。如果它们为空,请删除它们
  • 使用正则表达式搜索数字,而不是按非数字分割
  • 在运行代码之前,请删除所有前导/尾随非数字

我对Java不是很精通,但我相信您提供的代码中可能有一些更干净的Java习惯用法可以做到这一点。

您是否考虑过咨询Javadoc?谢谢,我们将非常感谢核心Java解决方案。:)谢谢你的解释。这很有帮助。@SoumyaKumar很高兴我帮了你。很好地确保答案符合你的具体问题!
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));