我的输入字符串是
element1-element2-element3-element4a|element4b-element5-
Run Code Online (Sandbox Code Playgroud)
预期的产出是
element1-element2-element3-element4a-element5-
element1-element2-element3-element4b-element5-
Run Code Online (Sandbox Code Playgroud)
因此短划线( - )是分隔符,管道(|)表示位置的两个替代元素.
我能够为包含单个管道的输入生成组合:
ArrayList<String> finalInput = new ArrayList<String>();
String Input = getInputPath();
StringBuilder TempInput = new StringBuilder();
if(Input.contains("|")) {
String[] splits = Input.split("\\|", 2);
TempInput.append(splits[0]+"-"+splits[1].split("-", 2)[1]);
finalInput.add(TempInput.toString());
TempInput = new StringBuilder();
String[] splits1 = new StringBuilder(Input).reverse().toString().split("\\|", 2);
finalInput.add(TempInput.append(splits1[0]+"-"+splits1[1].split("-", 2)[1]).reverse().toString());
}
Run Code Online (Sandbox Code Playgroud)
但是如果有多个管道符号,则此逻辑会失败.
有没有有效的方法来使用拆分字符串与组合?
输入:
element1-element2-element3-element4a|element4b-element5-element6a|element6b
Run Code Online (Sandbox Code Playgroud)
输出:
element1-element2-element3-element4a-element5-element6a
element1-element2-element3-element4b-element5-element6a
element1-element2-element3-element4a-element5-element6b
element1-element2-element3-element4b-element5-element6b
Run Code Online (Sandbox Code Playgroud)
递归有帮助.
public static void main(String[] args) {
produce("element1-element2-element3-element4a|element4b"
+ "-element5-element6a|element6b");
}
private static void produce(String input) {
String[] sequence = input.split("-");
String[][] elements = new String[sequence.length][];
for (int i = 0; i < sequence.length; ++i) {
elements[i] = sequence[i].split("\\|");
}
List<String> results = new ArrayList<>();
walk(results, elements, 0, new StringBuilder());
}
private static void walk(List<String> results, String[][] elements,
int todoIndex, StringBuilder done) {
if (todoIndex >= elements.length) {
results.add(done.toString());
System.out.println(done);
return;
}
int doneLength = done.length();
for (String alternative : elements[todoIndex]) {
if (done.length() != 0) {
done.append('-');
}
done.append(alternative);
walk(results, elements, todoIndex + 1, done);
done.setLength(doneLength); // Undo
}
}
Run Code Online (Sandbox Code Playgroud)
该String.split方法使用两次以获得可导航的方法String[][].并使用构建最终的String a StringBuilder.
| 归档时间: |
|
| 查看次数: |
926 次 |
| 最近记录: |