我有String a="abcd1234"
,我希望将其拆分为String b="abcd"
和Int c=1234
此分割代码应适用于所有输入王,如ab123456和acff432等。
如何拆分这种字符串。有可能吗?
答案 0 :(得分:16)
您可以尝试拆分像(?<=\D)(?=\d)
这样的正则表达式。试试这个:
String str = "abcd1234";
String[] part = str.split("(?<=\\D)(?=\\d)");
System.out.println(part[0]);
System.out.println(part[1]);
将输出
abcd
1234
您可以使用Integer.parseInt(part[1])
将数字字符串解析为整数。
答案 1 :(得分:3)
使用正则表达式:
Pattern p = Pattern.compile("([a-z]+)([0-9]+)");
Matcher m = p.matcher(string);
if (!m.find())
{
// handle bad string
}
String s = m.group(1);
int i = Integer.parseInt(m.group(2));
我没有编译过这个,但你应该明白这个想法。
答案 2 :(得分:3)
你可以做下一个:
split("(?=\\d)(?<!\\d)")
答案 3 :(得分:0)
蛮力解决方案。
String a = "abcd1234";
int i;
for(i = 0; i < a.length(); i++){
char c = a.charAt(i);
if( '0' <= c && c <= '9' )
break;
}
String alphaPart = a.substring(0, i);
String numberPart = a.substring(i);
答案 4 :(得分:0)
使用正则表达式&#34; [^ A-Z0-9] + |(?&lt; = [AZ])(?= [0-9])|(?&lt; = [0-9] ])(?= [AZ])&#34; 用字母和数字分割刺痛。
例如
Bitmap bm = BitmapFactory.decodeFile("path to file");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.JPEG, 100, baos); //bm is the bitmap
object
byte[] b = baos.toByteArray();
然后使用此正则表达式的输出将是:
ABC 123 DEF 456
有关完整代码,请访问以下网址:
http://www.zerotoherojava.com/split-string-by-characters-and-numbers/
答案 5 :(得分:0)
String st = "abcd1234";
String st1=st.replaceAll("[^A-Za-z]", "");
String st2=st.replaceAll("[^0-9]", "");
System.out.println("String b = "+st1);
System.out.println("Int c = "+st2);
输出
String b = abcd
Int c = 1234
答案 6 :(得分:0)
您可以为每组符号添加一些分隔符字符 ⦀
,然后围绕这些分隔符拆分字符串:
public static void main(String[] args) {
String[][] arr = {
split("abcd1234", "\u2980"),
split("ab123456", "\u2980"),
split("acff432", "\u2980")};
Arrays.stream(arr)
.map(Arrays::toString)
.forEach(System.out::println);
// [abcd, 1234]
// [ab, 123456]
// [acff, 432]
}
private static String[] split(String str, String delimiter) {
return str
// add delimiter characters
// to non-empty sequences
// of numeric characters
// and non-numeric characters
.replaceAll("(\\d+|\\D+)", "$1" + delimiter)
// split the string around
// delimiter characters
.split(delimiter, 0);
}
另见:How to split a string delimited on if substring can be casted as an int?
答案 7 :(得分:0)
试试这个:
String input_string = "asdf1234";
String string_output=input_string.replaceAll("[^A-Za-z]", "");
int number_output=Integer.parseInt(input_string.replaceAll("[^0-9]", ""));
System.out.println("string_output = "+string_output);
System.out.println("number_output = "+number_output);
答案 8 :(得分:-1)
public static void main(String... s) throws Exception {
Pattern VALID_PATTERN = Pattern.compile("([A-Za-z])+|[0-9]*");
List<String> chunks = new ArrayList<String>();
Matcher matcher = VALID_PATTERN.matcher("ab1458");
while (matcher.find()) {
chunks.add( matcher.group() );
}
}