Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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 split()的问题_Java_Regex - Fatal编程技术网

java split()的问题

java split()的问题,java,regex,Java,Regex,我有一个字符串: strArray= "-------9---------------"; 我想从字符串中找到9。字符串可能如下所示: strArray= "---4-5-5-7-9---------------"; 现在我只想找出字符串中的数字。我需要值9,4或类似的东西,忽略“-”。我尝试了以下方法: strArray= strignId.split("-"); 但它会出错,因为有多个“-”,我没有得到输出。那么应该使用java的哪些功能呢 我的输入和输出应如下所示: input="-

我有一个字符串:

strArray= "-------9---------------";
我想从字符串中找到9。字符串可能如下所示:

strArray= "---4-5-5-7-9---------------";
现在我只想找出字符串中的数字。我需要值9,4或类似的东西,忽略“-”。我尝试了以下方法:

strArray= strignId.split("-");
但它会出错,因为有多个“-”,我没有得到输出。那么应该使用java的哪些功能呢

我的输入和输出应如下所示:

input="-------9---------------";
    output="9";
input="---4-5-5-7-9---------------";
    output="45579";

我该怎么办?

+
是一个“一个或多个”重复的正则元字符,因此模式
-+
是“一个或多个破折号”。这将允许您改用
str.split(“-+”)
,但您可能会得到一个空字符串作为第一个元素

如果您只想删除所有
-
,那么您可以执行
str=str.replace(“-”,”)
。这使用的方法执行文本
字符串
替换,即不执行正则表达式模式

如果您想要一个字符串[]
,每个数字都在它自己的元素中,那么最简单的方法是分两步执行:首先删除所有非数字,然后使用零长度断言将不是字符串开头的所有位置拆分
(?!^)
(以防止将空字符串作为第一个元素)。如果您想要一个
char[]
,那么您可以直接调用

最后,如果字符串可能很长,最好在
find()
循环中使用a来查找数字
\d
,或者使用带有分隔符
\d*
,即非数字序列(可能为空)。这不会给您一个数组,但您可以使用循环来填充数组(请参阅有效的Java第二版,第25项:首选列表而非数组)

工具书类
  • ,

片段 以下是一些例子来说明上述观点:

    System.out.println(java.util.Arrays.toString(
        "---4--5-67--8-9---".split("-+")
    ));
    // [, 4, 5, 67, 8, 9]
    // note the empty string as first element

    System.out.println(
        "---4--5-67--8-9---".replace("-", "")
    );
    // 456789

    System.out.println(java.util.Arrays.toString(
        "abcdefg".toCharArray()
    ));
    // [a, b, c, d, e, f, g]
下一个示例首先删除所有非数字
\D
,然后在字符串
(?!^)
开头以外的所有位置拆分,以获得一个
字符串[]
,每个字符串包含一个数字:

    System.out.println(java.util.Arrays.toString(
        "@*#^$4@!#5ajs67>?<{8_(9SKJDH"
            .replaceAll("\\D", "")
            .split("(?!^)")
    ));
    // [4, 5, 6, 7, 8, 9]

split()的常见问题
以下是初学者在处理
字符串时遇到的一些常见问题。拆分

    System.out.println(java.util.Arrays.toString(
        "a;b;;d;;;g;;".split(";")
    ));
    // [a, b, , d, , , g]
第1课:
split
采用正则表达式模式 这可能是初学者最常见的错误:

System.out.println(java.util.Arrays.toString(
    "one|two|three".split("|")
));
// [, o, n, e, |, t, w, o, |, t, h, r, e, e]

System.out.println(java.util.Arrays.toString(
    "not.like.this".split(".")
));
// []
这里的问题是,
|
是正则表达式元字符,因为它们是按字面意思匹配的,所以需要通过在前面加反斜杠来转义,反斜杠作为Java字符串文字是
“\\”

第2课:
split
默认情况下丢弃尾随的空字符串 有时需要保留尾随的空字符串(默认情况下,这些字符串被丢弃
split
):

请注意,对于
c
e
f
,有“缺少”值的插槽,但对于
h
i
则没有。要解决此问题,可以使用负
limit
参数

您还可以使用n的正
限制
,最多应用n-1次模式(即,数组中的元素不超过n个)


零宽度匹配
split
示例 这里有更多关于零宽度匹配结构的拆分示例;这可以用于拆分字符串,但也可以保留“分隔符”

简单分句,保留标点符号:

    String str = "Really?Wow!This.Is.Awesome!";
    System.out.println(java.util.Arrays.toString(
        str.split("(?<=[.!?])")
    )); // prints "[Really?, Wow!, This., Is., Awesome!]"
大写字母前拆分(第一个除外!)

下面的相关问题中提供了各种示例

工具书类
相关问题
    • “abcghi”->“abc”、“ghi”、“ghi”、“abcghi”
    • “AnXMLAndXSLT2.0工具”->“一个XML和XSLT2.0工具”
    • C版本:
    • 您不使用拆分

      拆分就是把东西分隔开来

      为此,您希望消除不需要的字符;'-'

      解决办法很简单


      out=in.replaceAll(“-”和“”)

      使用类似的方法将单个值拆分。我宁愿先消除不需要的字符,以避免在结果数组中得到空/空字符串

      
      final Vector nodes = new Vector();
      int index = original.indexOf(separator);
      while (index >= 0) {
        nodes.addElement(original.substring(0, index));
        original = original.substring(index + separator.length());
        index = original.indexOf(separator);
      }
      nodes.addElement(original);
      final String[] result = new String[nodes.size()];
      if (nodes.size() > 0) {
        for (int loop = 0; loop smaller nodes.size(); loop++) {
          result[loop] = (String) nodes.elementAt(loop);
        }
      }
      return result;
      }
      

      如果我想得到一个数组中的输出,其中每个数字都在一个单元格中,那么该怎么办呢?天哪。你是当场写的吗+1以获得极好的响应。
          System.out.println(java.util.Arrays.toString(
              "a;b;;d;;;g;;".split(";", -1)
          ));
          // [a, b, , d, , , g, , ]
      
          String str = "Really?Wow!This.Is.Awesome!";
          System.out.println(java.util.Arrays.toString(
              str.split("(?<=[.!?])")
          )); // prints "[Really?, Wow!, This., Is., Awesome!]"
      
          String str = "012345678901234567890";
          System.out.println(java.util.Arrays.toString(
              str.split("(?<=\\G.{4})")
          )); // prints "[0123, 4567, 8901, 2345, 6789, 0]"
      
          System.out.println(java.util.Arrays.toString(
              "OhMyGod".split("(?=(?!^)[A-Z])")
          )); // prints "[Oh, My, God]"
      
      
      final Vector nodes = new Vector();
      int index = original.indexOf(separator);
      while (index >= 0) {
        nodes.addElement(original.substring(0, index));
        original = original.substring(index + separator.length());
        index = original.indexOf(separator);
      }
      nodes.addElement(original);
      final String[] result = new String[nodes.size()];
      if (nodes.size() > 0) {
        for (int loop = 0; loop smaller nodes.size(); loop++) {
          result[loop] = (String) nodes.elementAt(loop);
        }
      }
      return result;
      }