Java 如何用段落分隔字符串行以使文本成为列表

Java 如何用段落分隔字符串行以使文本成为列表,java,string,Java,String,我有一个很长的文本,看起来像“123TesteS1233IAMS初学者PLSHELP123..”,每次程序读取数字时,我都需要用段落分隔这一行。 因此,输出应该如下所示: 123测试 12333IAMBeninerPlsHelp 123 ... 一种方法是使用。如果假设每个输出行必须以123开头,即使输入不是以它开头,也可能是: String input = "123testes1233iambeginnerplshelp123 .."; String delimiter = "123"

我有一个很长的文本,看起来像“123TesteS1233IAMS初学者PLSHELP123..”,每次程序读取数字时,我都需要用段落分隔这一行。 因此,输出应该如下所示:

123测试
12333IAMBeninerPlsHelp

123 ...

一种方法是使用。如果假设每个输出行必须以
123
开头,即使输入不是以它开头,也可能是:

String input = "123testes1233iambeginnerplshelp123 ..";
String delimiter = "123";
StringTokenizer tokenizer = new StringTokenizer(input, delimiter);
while (tokenizer.hasMoreTokens()) {
  String line = delimiter + tokenizer.nextToken();
  System.out.println(line);
}

一种方法是使用。如果假设每个输出行必须以
123
开头,即使输入不是以它开头,也可能是:

String input = "123testes1233iambeginnerplshelp123 ..";
String delimiter = "123";
StringTokenizer tokenizer = new StringTokenizer(input, delimiter);
while (tokenizer.hasMoreTokens()) {
  String line = delimiter + tokenizer.nextToken();
  System.out.println(line);
}

您可以使用正则表达式来解决它。每次我们查找数字后面跟字符的图案时,如果找到,请打印:

        String text = "123testes1233stackoverflowwillsaveyou123dontworry";
        String wordToFind = "\\d+[a-z]+";
        Pattern word = Pattern.compile(wordToFind);
        Matcher match = word.matcher(text);

        while (match.find()) {
            System.out.println(match.group());
        }

您可以使用正则表达式来解决它。每次我们查找数字后面跟字符的图案时,如果找到,请打印:

        String text = "123testes1233stackoverflowwillsaveyou123dontworry";
        String wordToFind = "\\d+[a-z]+";
        Pattern word = Pattern.compile(wordToFind);
        Matcher match = word.matcher(text);

        while (match.find()) {
            System.out.println(match.group());
        }
一个简单的方法(没有任何依赖项)看起来像这样

class Test {

    public static void main (String[] args) throws java.lang.Exception
    {
        String a = "123testes1233iambeginnerplshelp123";
        StringBuffer sb = new StringBuffer();
        for (int i=0; i<a.length()-1; i++) {
            while (i<a.length()-1 && !(!isNumber(a.charAt(i)) && isNumber(a.charAt(i+1)))) {
                sb.append(a.substring(i,i+1));
                i++;
            }
            sb.append(a.substring(i,i+1));
            System.out.println(sb.toString());
            sb.setLength(0);
        }

    }

    private static boolean isNumber (char c) {
        return ((int)c >=48) && ((int)c <= 57);
    }

}
类测试{
公共静态void main(字符串[]args)引发java.lang.Exception
{
字符串a=“123testes1233iamselp123”;
StringBuffer sb=新的StringBuffer();
对于(inti=0;i,一个简单的方法(没有任何依赖项)看起来像这样

class Test {

    public static void main (String[] args) throws java.lang.Exception
    {
        String a = "123testes1233iambeginnerplshelp123";
        StringBuffer sb = new StringBuffer();
        for (int i=0; i<a.length()-1; i++) {
            while (i<a.length()-1 && !(!isNumber(a.charAt(i)) && isNumber(a.charAt(i+1)))) {
                sb.append(a.substring(i,i+1));
                i++;
            }
            sb.append(a.substring(i,i+1));
            System.out.println(sb.toString());
            sb.setLength(0);
        }

    }

    private static boolean isNumber (char c) {
        return ((int)c >=48) && ((int)c <= 57);
    }

}
类测试{
公共静态void main(字符串[]args)引发java.lang.Exception
{
字符串a=“123testes1233iamselp123”;
StringBuffer sb=新的StringBuffer();
对于(int i=0;i我的解

public StringSplitNum(){ 
    String someString = "123testes1233iambeginnerplshelp123abc";
    String regex = "((?<=[a-zA-Z])(?=[0-9]))|((?<=[0-9])(?=[a-zA-Z]))";
    List arr = Arrays.asList(someString.split(regex));
    for(int i=0; i< arr.size();i+=2){
    System.out.println(arr.get(i)+ " " + arr.get(i+1));
}
publicstringsplitnum(){
String someString=“123testes1233iamselip123abc”;
String regex=“((?my solution

public StringSplitNum(){ 
    String someString = "123testes1233iambeginnerplshelp123abc";
    String regex = "((?<=[a-zA-Z])(?=[0-9]))|((?<=[0-9])(?=[a-zA-Z]))";
    List arr = Arrays.asList(someString.split(regex));
    for(int i=0; i< arr.size();i+=2){
    System.out.println(arr.get(i)+ " " + arr.get(i+1));
}
publicstringsplitnum(){
String someString=“123testes1233iamselip123abc”;

String regex=“(?欢迎。你应该用“…我试着做了…”来完成你的问题,这样这里的人可以进一步指导你正确的方向。欢迎。你应该用“…我试着做了…”来完成你的问题这样这里的人可以进一步指导您正确的方向。我认为OP需要任何数字,而不是静态分隔符。是否有提供委托(谓词)的流式解决方案键入一个参数,而不是类似于StringTokenizer的常量字符串?@PaulNikonowicz如果它是任何数字,字符串将是1、2、3tests等,而不是123tests@PaulNikonowicz你说得对。抱歉不提。我想OP想要的是任何数字,而不是静态分隔符。是否有提供委托的流式解决方案(谓词)将类型作为参数,而不是类似于StringTokenizer的常量字符串?@PaulNikonowicz如果它是任何数字,字符串将是1、2、3tests等,而不是123tests@PaulNikonowicz你说得对。抱歉不提了。为什么要使用
start()
end()
?这还不够:
while(match.find()){System.out.println(match.group());}
?为什么要使用
start()
end()
?这还不够:
while(match.find()){System.out.println(match.group());}
?这绝对是您应该做的。我唯一的建议是附加“\n”而不是打印每一行,并将长度设置为0。然后您可以在以后进行一次大的打印。您还应该在StringBuffer上使用StringBuilder。这绝对是您应该做的。我唯一的建议是附加“\n”而不是打印每一行并将长度设置为0。然后您可以在之后进行一次大的打印。您还应该在StringBuffer上使用StringBuilder。