如何在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])编辑:如果大写正则表达式不返回任何内容,你知道我做错了什么吗?