gpt4 book ai didi

java - 想知道一种在不使用正则表达式的情况下根据作为参数传递的分隔符分割字符串的方法

转载 作者:行者123 更新时间:2023-12-02 09:58:26 26 4
gpt4 key购买 nike

我想要一种根据多个分隔符分割给定字符串的方法。我不想使用正则表达式来实现此目的,因为我必须使用枚举将分隔符作为字符串拆分方法中的参数传递。

我使用了枚举并将分隔符作为参数传递,并将结果存储在一个列表中,该列表对于单个分隔符来说效果很好。但我无法解决下一部分,我需要根据另一个分隔符分割剩余的字符串。

例如:

初始字符串 = "one.two#third"

new StringSplitter("one.two#three",Separator.dot.toString(),Separator.hash.toString())    
returns: {“one”, “two”, “three”}

我能够以某种方式获得“一二三”或“一”和“二三”作为输出,但并非所有子字符串都放在一个列表中。请参阅下面的代码来了解我到目前为止所尝试过的内容。

public class StringSplitter {

public String givenString;
public String givenSeparator;
public String anotherSeparator;


public StringSplitter (String givenString, String givenSeparator, String anotherSeparator) {
this.givenString=givenString;
this.givenSeparator=givenSeparator;
this.anotherSeparator=anotherSeparator;
}

public List<String> SplitMethod() {

List<String> FirstSplitList = Arrays.asList(givenString.split(givenSeparator));

System.out.println(FirstSplitList);

StringBuilder sb = new StringBuilder();
for (String ch:FirstSplitList) {
if(ch.contains(anotherSeparator)) {
sb.append(ch);
}

}

String newStringtoSplit = sb.toString();
System.out.println(newStringtoSplit);
List<String> newString = Arrays.asList(newStringtoSplit.split(anotherSeparator));
System.out.println(newString);

return newString;

}

public static void main (String[] args) {

StringSplitter var = new StringSplitter("one.two#three",Separator.dot.toString(),Separator.hash.toString());
var.SplitMethod();
}



enum Separator{

dot {
public String toString() {
return "\\.";
}
},

hash {
public String toString() {
return "#";
}
},

comma {
public String toString() {
return ",";
}
}

}

}

我希望代码二处理至少两个分隔符,并在字符串为“one.two#third”且分隔符为“.”时以下面的方式工作。和“#”输出应该是一个包含[一二三]的列表。

最佳答案

我的建议是用第一个分隔符替换其他分隔符。如果您还重复使用分隔符(如“一.二.三”),它也适用

public class StringSplitter {

public String givenString;
public String[] separators;

public StringSplitter (String givenString, String... separators) {
this.givenString=givenString;
this.separators = separators;

if(this.givenString == null || this.separators == null || this.separators.length < 1 ) {
throw new IllegalArgumentException("invalid arguments passed");
}
}

public List<String> splitMethod() {

String newGivenString = givenString;

// replace all other separators with the first one
if(separators.length > 1) {
// skip the first separator
for(int idx = 1; idx < separators.length; idx++) {
newGivenString = newGivenString.replaceAll(separators[idx], separators[0]);
}
}

List<String> splitList = Arrays.asList(newGivenString.split(separators[0]));

System.out.println(splitList);

return splitList;

}

public static void main (String[] args) {

StringSplitter var = new StringSplitter("one.two#three",Separator.DOT.toString(),Separator.HASH.toString());
var.splitMethod();

var = new StringSplitter("one.two#three,four",Separator.DOT.toString(),Separator.HASH.toString(),Separator.COMMA.toString());
var.splitMethod();

var = new StringSplitter("one.two#three four",Separator.DOT.toString());
var.splitMethod();
}



enum Separator{

DOT {
@Override
public String toString() {
return "\\.";
}
},

HASH {
@Override
public String toString() {
return "#";
}
},

COMMA {
@Override
public String toString() {
return ",";
}
}

}

}

关于java - 想知道一种在不使用正则表达式的情况下根据作为参数传递的分隔符分割字符串的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55813216/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com