如何在Java中列出字符串句子中的所有单词匹配条件

如何在Java中列出字符串句子中的所有单词匹配条件,java,string,Java,String,想象一下将以下“句子”作为字符串对象: String sentence = "AsomethingB 123 AsomethingElseB AsomethingBC abc A0B 987 ..."; 如何将所有内容都列在以字符串a开头,以字符串B结尾的单词的String[]中,例如: String[] words = new String[] {"AsomethingB", "AsomethingElseB", "A0B"}; // note the AsomethingBC is not

想象一下将以下“句子”作为字符串对象:

String sentence = "AsomethingB 123 AsomethingElseB AsomethingBC abc A0B 987 ...";
如何将所有内容都列在以字符串
a
开头,以字符串
B
结尾的单词的
String[]
中,例如:

String[] words = new String[] {"AsomethingB", "AsomethingElseB", "A0B"};
// note the AsomethingBC is not here.
在全球范围内,我正在寻找能够实现以下目标的方法:

public String[] listWords(String sentence, String startSequence, String endSequence) {
  // sentence will represent String from which "extract" words
  // startSequence will represent "A" from example, may contain more characters
  // endSequence will represent "B" from example, may contain more characters
  // return type String[] will return all matches (AsomethingB...) from example
    }

这样做可能吗?

这里有一种非流方法:

public static List<String> listWords(String sentence, String startSequence, String endSequence) {
    List<String> lst = new ArrayList<>();
    for (String s : sentence.split(" "))
        if (s.startsWith(startSequence) && s.endsWith(endSequence))
            lst.add(s);
    return lst;
}
公共静态列表listWords(字符串语句、字符串开始序列、字符串结束序列){
List lst=new ArrayList();
for(字符串s:语句.split(“”))
if(s.StartWith(startSequence)和s.endsWith(endSequence))
第1条增补;
返回lst;
}

作为一个
列表
来完成,因为它们比数组更简单。如果您真的需要数组,您可以随时转换它。

您可以使用java 8的流来获得结果,例如:

public static String[] listWords(String sentence, String startSequence, String endSequence) {
    return Arrays.stream(sentence.split("\\s+"))
            .filter(s -> s.startsWith(startSequence))
            .filter(s -> s.endsWith(endSequence))
            .collect(Collectors.toList()).toArray(new String[0]);
}
此方法基于空间拆分弹簧并执行比较。您可以这样调用此方法:

public static void main(String[] args) {
    System.out.println(Arrays.asList(listWords("AsomethingB 123 AsomethingElseB AsomethingBC abc A0B 987", "A", "B")));  
}
System.out.println(Arrays.asList(listWords("AsomethingB123AsomethingElseBAsomethingBCabcA0B987", "(?=[A-Z])(?<=[A-Z])|(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)", "A", "B")));
如果需要不区分大小写的匹配,还可以使用
toLowerCase()
方法

更新

如果单词未按空格分隔,并且希望对大写字母进行拆分,则可以使用以下命令(假设字符串也包含数字):

可以这样称呼:

public static void main(String[] args) {
    System.out.println(Arrays.asList(listWords("AsomethingB 123 AsomethingElseB AsomethingBC abc A0B 987", "A", "B")));  
}
System.out.println(Arrays.asList(listWords("AsomethingB123AsomethingElseBAsomethingBCabcA0B987", "(?=[A-Z])(?<=[A-Z])|(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)", "A", "B")));
System.out.println(Arrays.asList(listWords)(“AsomethingB123AsomethingElseBAsomethingBCabcA0B987”)(?=[A-Z])(?这里有一个解决方案:

return Pattern.compile(" ")
        .splitAsStream(sentence)
        .filter(w -> w.startsWith(startSequence))
        .filter(w -> w.endsWith(endSequence))
        .toArray(String[]::new);

您可以利用Java的.split命令。因此它可能类似于:

String sentence = "My Sentence AbbC";
String[] splitted = sentence.split(" ");
然后,您可以在拆分后的数组上循环,以确定索引是否具有所需的结果。此外,您还可以尝试.split(“A*B”),这将导致拆分后的包含字符串,这些字符串分别以A和B开头和结尾,作为它们自己的单数索引,而其他所有内容都将作为索引中的一个长字符串

例:

S:AbbD
S:Hello World,Acc

谢谢你的回答!但是如果这些单词没有被空格分割呢?例如:
AsomethingB123AsomethingElseBAsomethingBCabcA0B987
如果你想按大写字母分割,那么你可以使用
(?=\\p{Upper})
split
方法中。看看这个,用大写字母拆分字符串的答案:
split
接受一个
regex
,所以你可以指定任何模式,它会按照该模式吐出字符串。以下是javadoc:不要费心先将流收集到一个列表,然后将列表转换为o数组.Replace.collect(…).toArray…直接使用.toArray(size->new String[size])编辑:如果大写正则表达式不返回任何内容,你知道我做错了什么吗?