我有一个字符串集,它是" 5X3I3M3X"
我想分开5X = 1X1X1X1X1X,取决于角色前面的数字" X"
所以最后它可能是1X1X1X1X1X3I3M1X1X1X
我是这样做的,
String str = "5X3I3M3X";
StringBuffer sBuffer = new StringBuffer("");
for(int i = 1 ; i < str.length() ; i=i+2) {
if( str.charAt(i) == 'X'){
if(str.charAt(i-1) == 1){
sBuffer.append(str.charAt(i-1)+""+str.charAt(i));
}else{
StringBuffer sBufferTemp = new StringBuffer("");
for(int j=0 ; j < Character.getNumericValue(str.charAt(i-1)) ; j++){
sBufferTemp.append("1X");
}
sBuffer.append(sBufferTemp.toString());
}
} else {
sBuffer.append(str.charAt(i-1)+""+str.charAt(i));
}
}
System.out.println(sBuffer.toString());
我想知道是否有任何简单的方法来分离逻辑? 注意。如果我想添加到单独的&#39; I&#39;,那么它应该动态更改,例如&#34; 1X1X1X1X1X1I1I1I3M1X1X1X&#34;
如果(str.charAt(I)==&#39; I&#39;)....我可以更改我的代码。
我希望有另一种简单的方法来实现它。
答案 0 :(得分:1)
您可以将可配置的字符数组传递给方法。使用此配置,您可以检查当前字符是否可扩展。
以下程序的输出:
1X1X1X1X1X1I1I1I1M1M1M1X1X1X
public class StringExpander {
public static void main(String[] args) {
System.out.println(expand("5X3I3M3X", new char[] { 'X', 'I', 'M' }));
}
public static String expand(String str, char[] chArr) {
StringBuffer buff = new StringBuffer();
for (int i = 1; i < str.length(); i = i + 2) {
char ch = str.charAt(i);
if (contains(chArr, ch)) {
if (str.charAt(i - 1) == 1) {
buff.append(str.charAt(i - 1)).append(str.charAt(i));
} else {
StringBuffer tempBuff = new StringBuffer();
int repeat = Character.getNumericValue(str.charAt(i - 1));
for (int j = 0; j < repeat; j++) {
tempBuff.append(1).append(ch);
}
buff.append(tempBuff);
}
} else {
buff.append(str.charAt(i - 1)).append(ch);
}
}
return buff.toString();
}
private static boolean contains(char[] arr, char val) {
for (char ch : arr) {
if (ch == val) {
return true;
}
}
return false;
}
}
答案 1 :(得分:1)
根据您的编码解决方案,我建议进行以下更改:
String str = "5X3I3M3X";
StringBuilder sBuffer = new StringBuilder();
for (int i = 0; i < str.length(); ++i) {
if (i + 1 < str.length()
&& str.charAt(i + 1) == 'X'
&& str.charAt(i) != '1'
&& Character.isDigit(str.charAt(i))) {
int n = Character.getNumericValue(str.charAt(i));
for (int j = 0 ; j < n; ++j) {
sBufferTemp.append("1X");
}
++i;
} else {
sBuffer.append(str.charAt(i));
}
}
答案 2 :(得分:0)
我知道这不完全是语法糖......
String str = "5X3I3M3X";
char[] filter = new char[]{'X', 'I', 'M'};
StringBuffer stringBuffer = new StringBuffer("");
for (int i = 0; i < str.length(); i++) {
if (i != 0 && new String(filter).contains(Character.toString(str.charAt(i))) && Character.isDigit(str.charAt(i-1))) {
for (int j = 0; j < Character.getNumericValue(str.charAt(i-1)); j++) {
stringBuffer.append("1" + str.charAt(i));
}
} else if (i < str.length()-1 && new String(filter).contains(Character.toString(str.charAt(i+1)))) {
//do nothing
}
else {
stringBuffer.append(str.charAt(i));
}
}