我需要编写一个java代码来将VBA7425IWC
转换为ABV2457CIW
。我需要帮助。如果我对字符串进行排序,他们按ASCII值排序,数字变成一个块,字母变成另一个。
答案 0 :(得分:1)
这个使用正则表达式。您可能需要调整模式以包含小写字母:
import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class SplitRegex {
public static void main(String[] args) {
// The search string
String str = "VBA7425IWC";
// The Regular expression (Finds {word} tokens)
Pattern pt = Pattern.compile("[A-Z]+|[0-9]+");
// Match the string with the pattern
Matcher m = pt.matcher(str);
String result = "";
// If results are found
while (m.find()) {
char[] chArray = m.group(0).toCharArray();
Arrays.sort(chArray);
result += new String(chArray);
}
System.out.println(result);
}
}
答案 1 :(得分:0)
你的问题在要求上有点模糊。您是否尝试对字符和数字的每个子字符串进行排序?
在这种情况下,您需要确定每个子字符串的范围,表示为从字符到数字的转换。
start = 0
current = 0
for current = 0 to string.length-1:
if ASCII of current is letter AND ASCII of next is number OR vice-versa:
sort(string, start, current)
start = current
您可以通过ASCII值查找字符是否为字母或数字。
答案 2 :(得分:0)
这是一个示例解决方案,我通过将存储在List中的字符串简介数字和字母子字符串分开,然后使用java 8流API进行排序和缩减。
String s = "VBA7425IWC";
List<String> mylist = new ArrayList<>();
StringBuilder subString = new StringBuilder();
for (int k = 0; k < s.length() - 1; k++) {
subString.append(s.charAt(k));
if ((Character.isDigit(s.charAt(k + 1))
&& Character.isAlphabetic(s.charAt(k))) ||
(Character.isDigit(s.charAt(k))
&& Character.isAlphabetic(s.charAt(k + 1)))) {
mylist.add(subString.toString());
subString.setLength(0);
}
}
mylist.add(subString.append(s.charAt(s.length() - 1)).toString());
System.out.println(mylist);
String finalResult = mylist
.stream()
.map((myString) -> {
char[] charArr = myString.toCharArray();
Arrays.sort(charArr);
return new String(charArr);
})
.reduce("", (s1, s2) -> s1 + s2);