Swift:如何从字符串中提取特定规则的不重复单词数组?
嘿,我来帮你搞定这个提取特定单词数组的问题!咱们一步步拆解需求,解决你遇到的空格和大写逻辑的困扰:
解决方案:提取符合要求的单词数组
首先明确咱们的核心目标:从原始文本里挑出以大写"A"开头、不含换行、不重复的单词,最终整理成数组。下面是具体实现思路和代码示例(以Java为例,毕竟你提到了String类型,这是Java里常用的类型):
1. 先搞定文本清理与单词分割
你头疼的空格问题,其实可以用正则表达式一次性解决——把所有空白字符(包括连续空格、换行符\n)都当作分隔符,同时去掉文本首尾的多余空格:
String rawText = "你的原始文本内容,比如 Apple Ant\nBanana Apple \nApe"; // trim()去掉首尾空白,split("\\s+")用任意连续空白(空格/换行/制表符)分割 String[] allWords = rawText.trim().split("\\s+");
这一步做完,分割出来的单词自然不会包含换行符,因为换行已经被当作分隔符拆分掉了。
2. 过滤+去重一步到位
接下来要筛选出以大写"A"开头的单词,同时保证不重复。这里用LinkedHashSet最合适——它既能自动去重,还能保留单词在文本中首次出现的顺序:
import java.util.LinkedHashSet; import java.util.Set; // 初始化一个有序去重的集合 Set<String> validWords = new LinkedHashSet<>(); for (String word : allWords) { // 直接判断单词是否以大写"A"开头,精准匹配你的需求 if (word.startsWith("A")) { validWords.add(word); } } // 把集合转成最终需要的数组 String[] resultArray = validWords.toArray(new String[0]);
3. 完整可运行示例
把上面的逻辑整合起来,给你一个完整的代码例子:
import java.util.LinkedHashSet; import java.util.Set; public class WordExtractor { public static void main(String[] args) { String rawText = "Apple Ant\nBanana Apple \nApe Orange Ant\nAirplane"; // 清理文本并分割单词 String[] allWords = rawText.trim().split("\\s+"); // 过滤符合条件的单词并去重 Set<String> validWords = new LinkedHashSet<>(); for (String word : allWords) { if (word.startsWith("A")) { validWords.add(word); } } // 转换为目标数组 String[] result = validWords.toArray(new String[0]); // 测试输出 for (String word : result) { System.out.println(word); } // 输出结果:Apple、Ant、Ape、Airplane } }
额外小提示
如果你的文本里还有逗号、句号这类非空格的分隔符,可以先把它们替换成空格,再进行分割,避免出现Apple,这种带符号的“单词”:
// 把所有非字母数字的字符替换成空格 String cleanedText = rawText.replaceAll("[^a-zA-Z0-9\\s]", " ");
内容的提问来源于stack exchange,提问作者drebin96
相关产品推荐
相关产品推荐

