gpt4 book ai didi

java带有自定义规则的startsWith()方法

转载 作者:太空宇宙 更新时间:2023-11-04 15:23:59 25 4
gpt4 key购买 nike

我实现了打字训练器,并想创建具有特定规则的特殊 String startsWith() 方法。例如:'-' char 应等于任何长连字符('-' 等)。另外,我将为特殊重音字符添加其他规则(e 等于 é,但不等于 é 等于 e)。

public class TestCustomStartsWith {
private static Map<Character, List<Character>> identityMap = new HashMap<>();
static { // different hyphens: ‒, –, —, ―
List<Character> list = new LinkedList<>();
list.add('‒');
list.add('–'); // etc
identityMap.put('-', list);
}

public static void main(String[] args) {
System.out.println(startsWith("‒d--", "-"));
}

public static boolean startsWith(String s, String prefix) {
if (s.startsWith(prefix)) return true;
if (prefix.length() > s.length()) return false;
int i = prefix.length();
while (--i >= 0) {
if (prefix.charAt(i) != s.charAt(i)) {
List<Character> list = identityMap.get(prefix.charAt(i));
if ((list == null) || (!list.contains(s.charAt(i)))) return false;
}
}
return true;
}
}

我可以将各种长连字符替换为'-'字符,但如果规则更多,恐怕替换会太慢。

<小时/>

如何改进这个算法?

最佳答案

我不知道您的所有自定义规则,但是正则表达式可以吗?

用户正在传递一个字符串。创建一个方法将该字符串转换为正则表达式,例如

  1. 将短连字符替换为短连字符或长连字符 ([-−]),
  2. 你的口音也一样,e 变成 [eé]
  3. 以单词 dohicky 开头 (\b) 开头,

然后将其转换为正则表达式并尝试一下。

请注意,按照托比亚斯的建议,替换列表可以保存在 map 中。您的代码可能类似于

public boolean myStartsWith(String testString, String startsWith) {

for (Map.Entry<String,String> me : fancyTransformMap) {
startsWith = startsWith.replaceAll(me.getKey(), me.getValue());
}

return testString.matches('\b' + startsWith);
}

附:我不是正则表达式 super 专家,所以是否有可能的改进。

关于java带有自定义规则的startsWith()方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20057489/

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