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