[英]Alphanumeric subtrings sorting [closed]
我需要编写Java代码将VBA7425IWC
为ABV2457CIW
。 在这方面我需要帮助。 如果我对字符串进行排序,它们将按ASCII值进行排序,并且数字变成一个块,而字母变成另一个。
这个使用正则表达式。 您可能需要调整模式以包含小写字母:
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);
}
}
您的问题在要求方面有点含糊。 您是否正在尝试对字符和数字的每个子字符串进行排序?
在这种情况下,您需要确定每个子字符串的范围,以从字符到数字的转换表示。
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值查找字符是字母还是数字。
这是示例解决方案,我通过将存储在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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.