Java将字符串从单个字符串中分离出来
我有一套字符串是“5X3I3M3X” 我想分开5X=1x1x,取决于字符“X”前面的数字 所以最后它可能是1x1x1x3mi3m1x1x1x 我是这样做的Java将字符串从单个字符串中分离出来,java,regex,Java,Regex,我有一套字符串是“5X3I3M3X” 我想分开5X=1x1x,取决于字符“X”前面的数字 所以最后它可能是1x1x1x3mi3m1x1x1x 我是这样做的 String str = "5X3I3M3X"; StringBuffer sBuffer = new StringBuffer(""); for(int i = 1 ; i < str.length() ; i=i+2) { if( str.charAt(i) == 'X'){
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());
String str=“5X3I3M3X”;
StringBuffer sBuffer=新的StringBuffer(“”);
对于(int i=1;i
我想知道有没有简单的方法来区分这种逻辑?
注意。如果我想添加到单独的“I”,那么它也应该像“1x1i1i3m1x1x1x”一样动态更改
如果(str.charAt(I)='I')…,我可以将其更改为我的代码extpend
我希望有另一种简单的方法来实现这一点。您可以将可配置的字符数组传递到方法中。使用此配置,可以检查当前角色是否可展开 以下程序的输出:
1X1X1X1X1X1I1I1I1M1M1M1X1X1X
公共类StringExpander{
公共静态void main(字符串[]args){
println(扩展(“5X3I3M3X”,新字符[]{'X','I','M'});
}
公共静态字符串扩展(字符串str,char[]chArr){
StringBuffer buff=新的StringBuffer();
对于(int i=1;i
您可以将可配置字符数组传递到方法中。使用此配置,可以检查当前角色是否可展开
以下程序的输出:
1X1X1X1X1X1I1I1I1M1M1M1X1X1X
公共类StringExpander{
公共静态void main(字符串[]args){
println(扩展(“5X3I3M3X”,新字符[]{'X','I','M'});
}
公共静态字符串扩展(字符串str,char[]chArr){
StringBuffer buff=新的StringBuffer();
对于(int i=1;i
根据您的编码解决方案,我建议进行以下更改:
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));
}
}
String str=“5X3I3M3X”;
StringBuilder sBuffer=新的StringBuilder();
对于(int i=0;i
- 使用更新更快的StringBuilder而不是StringBuffer
- 循环遍历所有i,因此默认情况下的追加是直接进行的
- 条件可以更完整,不需要对“1”进行检查
- 必须与字符“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));
}
}
String str=“5X3I3M3X”;
StringBuilder sBuffer=新的StringBuilder();
对于(int i=0;i
- 使用更新更快的StringBuilder而不是StringBuffer
- 循环遍历所有i,因此默认情况下的追加是直接进行的
- 条件可以更完整,不需要对“1”进行检查
- 必须与字符“1”进行比较,而不是与1进行比较
- 我知道这完全不是语法上的甜点
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));
}
}
String str=“5X3I3M3X”;
char[]filter=new char[]{'X',