我有一个由字母和数字组成的字符串,例如。
String s = "C34M78N8X";
字符串我想把每个字母和旁边的数字分开,这样就可以:
{"C34" "M78" "N8" "X"} //in that order
型有什么关于String或Integer的类方法的想法吗?我是Java的初学者,所以我想学习不同的东西。我到处都查过了,什么都没找到。先谢谢你。
String
Integer
c0vxltue1#
多亏了Andreas
import java.util.Arrays; public class Main { public static void main(String[] args) { String s = "C34M78N8X"; String[] arr = s.split("(?=\\p{L})"); System.out.println(Arrays.toString(arr)); } }
字符串
输出:
[C34, M78, N8, X]
型\p{L}matches a letter和(?=(regex))用于Positive Lookahead。regex101上的正则表达式的更多解释:
\p{L}
(?=(regex))
的数据
使用正则表达式\w(?:\d+)?,您可以使用Java正则表达式API获得匹配。
\w(?:\d+)?
import java.util.List; import java.util.regex.MatchResult; import java.util.regex.Pattern; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { // Test System.out.println(getTokens("C34M78N8X")); } static List<String> getTokens(String textString) { return Pattern .compile("\\w(?:\\d+)?") .matcher(textString) .results() .map(MatchResult::group) .collect(Collectors.toList()); } }
型
非Stream溶液:
Stream
import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static void main(String[] args) { // Test System.out.println(getTokens("C34M78N8X")); } static List<String> getTokens(String textString) { List<String> matches = new ArrayList<>(); Matcher matcher = Pattern.compile("\\w(?:\\d+)?").matcher(textString); while (matcher.find()) { matches.add(matcher.group()); } return matches; } }
型了解有关Java RegEx API的更多信息,请访问**Lesson: Regular Expressions**
regex101处正则表达式说明:
的
zazmityj2#
您希望在和两个非数字字符之间拆分。您可以使用以下任意两项来执行此操作:
?!\\d)
(?=\\D)
因此,使用(?!\\d)(?=\\D),正则表达式只是说,“* 匹配您看到非数字后跟非数字的区域。
(?!\\d)(?=\\D)
String[] data = { "ABCDEF","A12345","A1B2C3D4","AX3YM67", "A1233BB1233", "A3D456F6D" }; List<List<String>> lists = new ArrayList<>(); for (String str : data) { String[] st = str.split("(?!\\d)(?=\\D)"); lists.add(Arrays.asList(st)); } for(int i = 0; i < data.length; i++) { System.out.println(data[i] + " --> " + lists.get(i)); }
字符串印刷品
ABCDEF --> [A, B, C, D, E, F] A12345 --> [A12345] A1B2C3D4 --> [A1, B2, C3, D4] AX3YM67 --> [A, X3, Y, M67] A1233BB1233 --> [A1233, B, B1233] A3D456F6D --> [A3, D456, F6, D]
2条答案
按热度按时间c0vxltue1#
更新:
多亏了Andreas
字符串
输出:
型
\p{L}
matches a letter和(?=(regex))
用于Positive Lookahead。regex101上的正则表达式的更多解释:
的数据
原文答案:
使用正则表达式
\w(?:\d+)?
,您可以使用Java正则表达式API获得匹配。型
输出:
型
非
Stream
溶液:型
了解有关Java RegEx API的更多信息,请访问**Lesson: Regular Expressions**
regex101处正则表达式说明:
的
zazmityj2#
您希望在和两个非数字字符之间拆分。
您可以使用以下任意两项来执行此操作:
?!\\d)
数字的零宽度负前瞻(?=\\D)
非数字的零宽度正向前看因此,使用
(?!\\d)(?=\\D)
,正则表达式只是说,“* 匹配您看到非数字后跟非数字的区域。字符串
印刷品
型