Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.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_String_Split - Fatal编程技术网

在Java中,如果分隔符出现在给定索引之后,则仅根据分隔符拆分字符串一次

在Java中,如果分隔符出现在给定索引之后,则仅根据分隔符拆分字符串一次,java,regex,string,split,Java,Regex,String,Split,我一直在寻找一个单步过程来分割一个字符串,仅当分隔符出现在某个索引之后时,才根据分隔符分割一次字符串。 例如 输入:字符串-->我的城市有破折号,分隔符-->“-”,索引-->“3” 虽然第一个分隔符出现在第三个位置,但未提供>索引。因此,正则表达式应该查找delimeter>index的下一次出现,并且只拆分一次 输出[]:{“mycity”、“hasadash”} 输入:字符串-->m-ycityhasadash,分隔符-->“-”,索引-->“3” delimeter的索引小于提供的索引。

我一直在寻找一个单步过程来分割一个字符串,仅当分隔符出现在某个索引之后时,才根据分隔符分割一次字符串。 例如

输入:字符串-->我的城市有破折号,分隔符-->“-”,索引-->“3”

虽然第一个分隔符出现在第三个位置,但未提供>索引。因此,正则表达式应该查找delimeter>index的下一次出现,并且只拆分一次

输出[]:{“mycity”、“hasadash”}

输入:字符串-->m-ycityhasadash,分隔符-->“-”,索引-->“3” delimeter的索引小于提供的索引。所以不需要拆分。
输出[]:{“mycityhasadash”}

您可以使用和的组合来获得它:

String str = "my-city-hasa-dash";
String delimiter = "-";
int fromIndex = 3;
int delimiterIndex = str.indexOf(delimiter, fromIndex);
String[] output = delimiterIndex < 0 ? new String[]{str} :
        new String[]{
                str.substring(0, delimiterIndex).replace(delimiter, ""),
                str.substring(delimiterIndex).replace(delimiter, "")
        };
String str=“我的城市有一个破折号”;
字符串分隔符=“-”;
int fromIndex=3;
int delimiterIndex=str.indexOf(分隔符,fromIndex);
字符串[]输出=delimiterIndex<0?新字符串[]{str}:
新字符串[]{
str.substring(0,delimiterIndex).replace(分隔符,“”),
str.substring(delimiterIndex).replace(分隔符“”)
};
输出:

[我的城市,哈萨达什]


如果您使用的是Java 8,则可以使用:

String[] output = Arrays.asList(
        str.replaceAll("^(.{0,2})-", "$1").split("-", 2))
        .stream()
        .map(x -> x.replace("-", ""))
        .toArray(String[]::new);
输出

my-city-hasa-dash - [mycity, hasadash]
m-ycityhasadash   - [mycityhasadash]
详细信息

  • str.replaceAll(“^({0,2})-”,“$1”)
    将替换前三个字符之前的所有
    -
  • .split(“-”,2)
    将字符串拆分两次
  • .map(x->x.replace(“-”,”)
    替换结果输出中的所有
    -
  • .toArray(字符串[]:新建)
    将结果收集到数组中
看看:


这是一个预期的过程,但又是一个多步骤的过程,我在寻找一个能在一个步骤中完成所有事情的正则表达式。这是一个预期的过程,但又是一个多步骤的过程,我在寻找一个能在一个步骤中完成所有事情的正则表达式。
my-city-hasa-dash - [mycity, hasadash]
m-ycityhasadash   - [mycityhasadash]