gpt4 book ai didi

java - 查找句子/字符串中的子字符串

转载 作者:行者123 更新时间:2023-12-02 10:02:10 29 4
gpt4 key购买 nike

我正在尝试返回句子中包含给定字符串最常见字符的单词。

例如:

给定句子:

老人对星巴克打喷嚏。

给出的词:

需要

我想返回该句子中打喷嚏的单词。

我对 Java 还很陌生,实际上我是 JS 和 Python 开发人员,所以我对 Char 数组、ArrayList、StringBuilder 等感到非常困惑。

在我看来,

  1. 我需要将给定的句子传递到字符串数组中
  2. 将每个元素转换为 char 数组
  3. 在同一循环中将给定单词转换为字符数组
  4. 计算出现次数最多的单词并返回该索引

但我真的不知道我需要使用什么数组类型。

有人可以帮我提供一些可以引导我找到解决方案的小片段或算法吗?

这就是我开始的方式,但我觉得这不会帮助我完成我正在寻找的事情:

        ArrayList<String> wordArrayList = new ArrayList<String>();
int count = 0;
for(String eachWord : sentence.split(" ")) {
wordArrayList.add(eachWord);

char[] charArray = eachWord.toCharArray();
char[] givenWord = word.toCharArray();
}

感谢大家的时间和关注。

编辑:

我想添加另一个案例来澄清我想要完成的任务:

给定句子:

最多配音

给出的词:

公交车

返回:

配音

最佳答案

假设您只想返回第一次出现的情况,您可以修改 for 循环以迭代句子中的整个单词,而不是使用 str.split() 来迭代单个字符。 ,并利用str.contains(): .

class Main {
static String findWordThatMatchesSubString(String sentence, String subString) {
for (String word : sentence.split(" ")) {
if (word.contains(subString)) {
return word;
}
}
return null;
}

public static void main(String[] args) {
String sentence = "Old man sneezed at Starbucks.";
String subString = "nee";
String foundWord = findWordThatMatchesSubString(sentence, subString);
if (foundWord != null) {
System.out.println(foundWord);
} else {
System.out.println(subString + " was not found in any word.");
}

}
}

输出:

sneezed

如果您确实需要处理多个匹配项,则使用 ArrayList就像您目前正在做的事情是合适的:

import java.util.ArrayList;
import java.util.List;

class Main {
static List<String> findWordsThatMatchesSubString(String sentence, String subString) {
List<String> wordMatches = new ArrayList<>();
for (String word : sentence.split(" ")) {
if (word.contains(subString)) {
wordMatches.add(word);
}
}
return wordMatches.size() > 0 ? wordMatches : null;
}

public static void main(String[] args) {
String sentence = "Old man sneezed at Starbucks and dropped his knitting needle on the floor.";
String subString = "nee";
List<String> foundWords = findWordsThatMatchesSubString(sentence, subString);
if (foundWords != null) {
System.out.println(foundWords);
} else {
System.out.println(subString + " was not found in any word.");
}
}
}

输出:

[sneezed, needle]
<小时/>

关于查找句子中包含 subString 中所有字符的单词的后续问题,您可以维护 Map字符数及其数量以达到您想要的结果:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

class Main {
static List<String> findWordsThatContainAllCharsInSubString(String sentence, String subString) {
List<String> wordMatches = new ArrayList<>();
for (String word : sentence.split(" ")) {
if (containsAllChars(word, subString)) {
wordMatches.add(word);
}
}
return wordMatches.size() > 0 ? wordMatches : null;
}

static boolean containsAllChars(String word, String subString) {
if (word.length() < subString.length()) {
return false;
}
Map<Character, Integer> subStringCharsMap = new HashMap<>();
for (char c : subString.toCharArray()) {
subStringCharsMap.put(c, subStringCharsMap.getOrDefault(c, 0) + 1);
}
for (char c : word.toCharArray()) {
if (subStringCharsMap.containsKey(c)) {
if (subStringCharsMap.get(c) == 1) {
subStringCharsMap.remove(c);
} else {
subStringCharsMap.put(c, subStringCharsMap.get(c) - 1);
}
}
if (subStringCharsMap.size() == 0) {
return true;
}
}
return false;
}

public static void main(String[] args) {
String sentence = "I got a new pair of shoes";
String subString = "hes";
List<String> foundWords = findWordsThatContainAllCharsInSubString(sentence, subString);
if (foundWords != null) {
System.out.println(foundWords);
} else {
System.out.println(subString + " was not found in any word.");
}
}
}

输出:

[shoes]

关于java - 查找句子/字符串中的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55544004/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com