Java 从字符串中提取两种类型的文本

Java 从字符串中提取两种类型的文本,java,Java,我有一个字符串,它包含两种(一般情况下为N)类型的数据,由打开和关闭标记分隔: type1a <: type2a :> type1b <: type2b :> type1-c type1a type1b type1-c 有许多这样的混合数据的实际例子,例如代码和注释(可能还有javadoc注释)、纯html和脚本部分等 我想将字符串拆分为包含不同类型数据的字符串;仅仅一个(“type1a”、“type2a”、“type1b”、“type2b”、“type1-c”)的数

我有一个字符串,它包含两种(一般情况下为N)类型的数据,由打开和关闭标记分隔:

type1a <: type2a :> type1b <: type2b :> type1-c
type1a type1b type1-c
有许多这样的混合数据的实际例子,例如代码和注释(可能还有javadoc注释)、纯html和脚本部分等

我想将字符串拆分为包含不同类型数据的字符串;仅仅一个
(“type1a”、“type2a”、“type1b”、“type2b”、“type1-c”)的数组/列表是不够的,因为我需要数据类型

对其进行编码将(而且可能会)是一个有趣的练习,但必须有一个现有的库已经提供了此功能

是否有Java库提供这样的功能,即将字符串拆分为多个不同性质的片段,并保留每个片段类型的信息?

公共静态列表读取(string str){
public static List<String> read(String str) {
    List<String> res = new ArrayList<>();

    try (Scanner scan = new Scanner(str)) {
        scan.useDelimiter("\\s*<:\\s*|\\s*:>\\s*");

        while (scan.hasNext())
            res.add(scan.next());
    }

    return res;
}
List res=new ArrayList(); 尝试(扫描仪扫描=新扫描仪(str)){ scan.useDelimiter(“\\s*\\s*”); while(scan.hasNext()) res.add(scan.next()); } 返回res; }
在我看来,您似乎想要提取一个配对列表:

public static void main(String[] args) {
    String opening = "<:";
    String closing = ":>";
    String str = " type1a  <:  type2a :> type1b <:  type2b :> type1c   <: type2c :>  ";

    String[] splitted = str.split(closing);
    List<Pair<String, String>> list = new ArrayList<>();

    for (String item : splitted) {
        if (item.trim().isEmpty())
            break;

        int index = item.indexOf(opening);
        String first = item.substring(0, index).trim();
        String second = item.substring(index + opening.length()).trim();
        Pair<String, String> p = new Pair<>(first, second);
        list.add(p);
    }

    for (Pair<String, String> p : list) {
        System.out.println(p.getKey() + " " + p.getValue());
    }
}

有了11k rep,您可能应该知道,在StackOverflow上询问库建议是离题的。如果你问这是一个编码问题,你还不清楚你在寻找什么,你期望什么样的输出(你的不够好的例子不能说明什么是好的)你好,如果我正确地理解你的问题,你可以认为这是一个习惯语法。如果是这样的话,您可以使用语言处理库(如ANTLR或design patter解释器)来解决这个问题。它与
Arrays.asList(myString.split(“”)
有什么不同吗?嗯,问题是我不确定每个
type1a type2a
type1b type2b
type1c type2c