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