Java,如何将给定字符串拆分为三个独立的部分?

Java,如何将给定字符串拆分为三个独立的部分?,java,arrays,regex,string,Java,Arrays,Regex,String,我有一个如下格式的字符串列表: 9-11 w:wwtxmsjwjwlw独立于:9-11,w,wwtxmsjwjwlw 5-6g:wgggghg分离为5-6g,wgghg 1-5g:dxggdggb分离为1-5g,dxggdggb 5-13 f:lfgdplfffxffswck与5-13 f分开,lfgdplfffxffswck 6-7z:zzzzzzzzz单独到6-7,z,zzzzzzz 这些只是例子,所以在现实中还有更多,只是为了让你们知道它看起来像什么,左边是给定的,右边是我想要改变的,并且

我有一个如下格式的字符串列表:

9-11 w:wwtxmsjwjwlw独立于:9-11,w,wwtxmsjwjwlw

5-6g:wgggghg分离为5-6g,wgghg

1-5g:dxggdggb分离为1-5g,dxggdggb

5-13 f:lfgdplfffxffswck与5-13 f分开,lfgdplfffxffswck

6-7z:zzzzzzzzz单独到6-7,z,zzzzzzz

这些只是例子,所以在现实中还有更多,只是为了让你们知道它看起来像什么,左边是给定的,右边是我想要改变的,并且能够访问这些值以备将来使用,比如存储在三个数组中,每种类型的三个值以这种方式共享相同的索引。。。 如何将每个部分分开,并以某种方式保留这些值,以便访问它们? 以下是我尝试过的:

int[] a1 = new int[10];
int[] a2 = new int[10];
int[] a3 = new int[10];
for(int i=0;i<a1.length;i++){
    a1[i].split("^[0-9]-[0-9]");//take the format of whatever looks like "int-int"
    a1[i].split("/d[a/z]:");//take the letter before the: - :"char:"
    a1[i].split("[a-z]{1,}");// take the long text that has a minimum of 1 char "String"for example -zzzzgzzzz

}
int[]a1=新的int[10];
int[]a2=新的int[10];
int[]a3=新的int[10];
对于(int i=0;i Long.parseLong(matcher.group(2))){
} 
否则{
C++;
}
返回c;
}
公共静态void main(字符串[]args)引发java.lang.Exception
{
整数计数=0;

对于(inti=0;i我认为您的方法是错误的;只需将整个文本或逐行输入一个同时匹配所有三个部分的正则表达式即可,例如

(\d+-\d+) (\w): ([a-z]+)
我已将其提取到一个函数中,该函数需要单行,匹配各个部分,并测试指定的引用范围

:

import java.util.regex.Matcher;
导入java.util.regex.Pattern;
表意文字
{
公共静态布尔测试字符串(字符串s){
字符串regex=“(\\d+)-(\\d+)(\\w):([a-z]+)”;
Pattern=Pattern.compile(regex);
匹配器匹配器=模式匹配器;
matcher.find();
//System.out.println(“完全匹配:+matcher.group(0));
模式p=Pattern.compile(matcher.group(3));
Matcher m=p.Matcher(Matcher.group(4));
长计数=m.results().count();
if(countLong.parseLong(matcher.group(2))){
返回false;
}否则{
返回true;
}
}
公共静态void main(字符串[]args)引发java.lang.Exception
{
final String=“9-11 w:wwtxmsjwjwlw\n”
+“5-6 g:wgggghg\n”
+“1-5 g:dxggdggb\n”
+“5-13 f:lfgdplfffxffswck\n”
+“6-7 z:zzzzzzz”;
对于(字符串s:String.split(“\n”)){
系统输出打印项次;
System.out.println(测试字符串);
}
}
}
可能值得为
^
开始和
$
结束位置添加锚定:
^(\d+-\d+)([a-z]+)$

您可以使用每个输入行并将其转换为单独的类对象来进一步处理这些数据

public final class Data {

    private final String one;
    private final String two;
    private final String three;

    public Data(String one, String two, String three) {
        this.one = one;
        this.two = two;
        this.three = three;
    }
}

private static final String REGEXP=“(?\\d+-\\d+\\s*(?\\w+)\\s*:\\s*(?\\w+)”;
公共静态列表数据(列表行){
Pattern=Pattern.compile(REGEXP);
返回行。stream()
.map(模式::匹配器)
.filter(Matcher::matches)
.map(matcher->新数据(matcher.group(“一”)、matcher.group(“两”)、matcher.group(“三”))
.collect(Collectors.toList());
}

演示:

List<String> lines = Arrays.asList(
        "9-11 w: wwtxmsjwjwlw",
        "5-6 g: wggghg",
        "1-5 g: dxggdggb",
        "5-13 f: lfgdplfffxffswck",
        "6-7 z: zzzzgzzzz ");
List<Data> data = convertData(lines);
List line=Arrays.asList(
“9-11 w:WWTXMSJWWLW”,
“5-6克:WGGHG”,
“1-5g:dxggdggb”,
“5-13 f:lfgdplfffxffswck”,
“6-7 z:zzzzzzz”);
列表数据=转换数据(行);

你试过使用子字符串吗?这是javascript,java?@rokk_crow编辑的评论。现在看一看。那么我如何访问不同的部分呢?想检查字符中的int int重复了字符串中的次数吗?5-7 k:kkkkkgk-检查k重复了5-7次吗?我想是发生了,基本上是检查它的真实性e、 这不一定是真的,但我想检查字母是否出现在字符串的给定范围内,这是否使我们明智地使用一个计数来返回多个不同输入的正确次数,我在问题中包括了一些。Thanksher是一个完全重新设计的答案。你所做的非常有帮助,假设我是我有很多输入,我使用reader.nextLine()如何更改代码/函数?谢谢
public final class Data {

    private final String one;
    private final String two;
    private final String three;

    public Data(String one, String two, String three) {
        this.one = one;
        this.two = two;
        this.three = three;
    }
}
private static final String REGEXP = "(?<one>\\d+-\\d+)\\s*(?<two>\\w+)\\s*:\\s*(?<three>\\w+)";

public static List<Data> convertData(List<String> lines) {
    Pattern pattern = Pattern.compile(REGEXP);

    return lines.stream()
                .map(pattern::matcher)
                .filter(Matcher::matches)
                .map(matcher -> new Data(matcher.group("one"), matcher.group("two"), matcher.group("three")))
                .collect(Collectors.toList());
}
List<String> lines = Arrays.asList(
        "9-11 w: wwtxmsjwjwlw",
        "5-6 g: wggghg",
        "1-5 g: dxggdggb",
        "5-13 f: lfgdplfffxffswck",
        "6-7 z: zzzzgzzzz ");
List<Data> data = convertData(lines);