Java 以数字作为标记拆分字符串

Java 以数字作为标记拆分字符串,java,Java,在识别数字之前,从字符串返回元素的最优雅方式是什么 例如: test213home --> test 234tower --> test --> test test213home --> 213home 234tower --> 234tower test --> 另一个问题: 识别数字后,从字符串返回元素的最优雅方式是什么 例如: test213home --> test 234tower --> test --> test t

在识别数字之前,从字符串返回元素的最优雅方式是什么

例如:

test213home --> test
234tower --> 
test --> test
test213home --> 213home
234tower --> 234tower
test --> 
另一个问题:

识别数字后,从字符串返回元素的最优雅方式是什么

例如:

test213home --> test
234tower --> 
test --> test
test213home --> 213home
234tower --> 234tower
test --> 

这就是你想要的吗:

String [] parts = str.split("\\d+")

对于第一个问题,此功能正常工作:

String  getSubstringUntilFirstNumber(String source) {
    return source.split("[0-9]")[0];
}
您不应该以“优雅的方式”编写代码。您可以选择一个简单的解决方案(即易于编写/读取/维护(并非在所有情况下都是最快的)或满足您的需求(大小、速度等)的解决方案

一个可能的简单解决方案(基于您的示例)可能是

输出

value: test213home   first: test   last: 213home
value: 234tower      first:        last: 234tower
value: test          first: test   last: 
value: foo42bar23    first: foo    last: 42bar23
value: 12345test123   first: 12345     last: test123
value: test123abc     first: test123   last: abc
对于正则表达式的解释,我建议您阅读以下内容

编辑在评论中查找问题的片段

String[] strings1 = { "12345test123", "test123abc"};
for (String string : strings1) {
    String first = string.replaceFirst("^([^\\d]*[\\d]*).*", "$1");
    String last = string.replaceFirst("^[^\\d]*[\\d]*(.*)", "$1");
    System.out.printf("value: %-12s   first: %-7s   last: %s%n", string, first, last);
}
输出

value: test213home   first: test   last: 213home
value: 234tower      first:        last: 234tower
value: test          first: test   last: 
value: foo42bar23    first: foo    last: 42bar23
value: 12345test123   first: 12345     last: test123
value: test123abc     first: test123   last: abc

这是一种非正则表达式方法,您可以在字符串中搜索一个数字的索引(如果有)。然后您只需得到
子字符串
结果。如果没有找到数字,请注意三元选择

public class StackOverflow {
    public static void main(String[] args) {
        String[] data = { "test213home", "234tower", "test", "foo42bar23" };
        for (String d : data) {
            System.out.println("Before digit: " + beforeDigit(d));
            System.out.println("After digit : " + afterDigit(d));
            System.out.println("");
        }
    }

    private static String beforeDigit(String data) {
        int index = findDigitIndex(data);
        return index > -1 
            ? data.substring(0, index)
            : data.substring(0);
    }

    private static String afterDigit(String data) {
        int index = findDigitIndex(data);
        return index > -1
            ? data.substring(index)
            : data.substring(0);
    }

    private static int findDigitIndex(String data) {
        int index = -1;
        for (int i = 0; i < data.length(); i++) {
            if (Character.isDigit(data.charAt(i))) {
                index = i;
                break;
            }
        }

        return index;
    }
}

看不出这是一个Java问题。你已经试过什么了吗?请定义“优雅”。这是一个非常主观的词。“美丽在旁观者的眼里”有人可能会说。请分享您的代码,您到目前为止是如何尝试解决这个问题的。thx you-字符串中最后一行数字之后分割的正则表达式是什么?例如a)12345test123至-->12345和test123或b)test123abc-->test123和abc@DoeDoe看看我更新的答案,为你的第二个问题找到一个可能的解决方案。有关更多问题,请查看发布的教程,并在新问题中发布您自己的努力。