Java:String:有没有更好的方法来比较字符串
今天早上我很好奇,想知道有没有更好的方法Java:String:有没有更好的方法来比较字符串,java,swing,Java,Swing,今天早上我很好奇,想知道有没有更好的方法 if(TAG_PLAY.equalsIgnoreCase(e.getActionCommand()) ||TAG_PASSWORD.equalsIgnoreCase(e.getActionCommand()) ||... ){ 我有一种预感,这可以通过做类似的事情来改善 创建一个大字符串并在其中查找e.getActionCommand() 但我不知道这是否会更有效率 注意:这与getActionCommand无关,我只对做同样事情的逻辑、性
if(TAG_PLAY.equalsIgnoreCase(e.getActionCommand())
||TAG_PASSWORD.equalsIgnoreCase(e.getActionCommand())
||...
){
我有一种预感,这可以通过做类似的事情来改善
创建一个大字符串并在其中查找e.getActionCommand()
但我不知道这是否会更有效率
注意:这与getActionCommand无关,我只对做同样事情的逻辑、性能和新方法/模式感兴趣
编辑:我没有考虑大小写的争论^^
编辑: 这个怎么样:
s = TAG_PLAY+","+TAG_PASSWORD;
//compareToIgnoreCase is not optimal since it will go through all the String
if(0!=s.compareToIgnoreCase(anotherString)){
这看起来是一个很好的候选人。一个简单的例子是:
public enum TagType
{
TAG_PLAY,
TAG_PASSWORD
}
但是,您可以详细说明这一点。Java枚举提供整数的性能(用于比较)以及对象的类型安全性和行为。您不必担心等价的
e.getActionCommand()
不是有效的标记,因为它是类型安全的。您考虑过使用Set.contains(对象)吗
例如:
Set<String> cases = new HashSet<String>();
cases.add( TAG_PLAY.toLowerCase() );
cases.add( TAG_PASSWORD.toLowerCase() );
...
if ( cases.contains( e.getActionCommand().toLowerCase() ) {
...
Set cases=newhashset();
cases.add(TAG_PLAY.toLowerCase());
cases.add(TAG_PASSWORD.toLowerCase());
...
if(cases.contains(e.getActionCommand().toLowerCase()){
...
如果要实现用于字符串匹配的数据结构,可能需要某种类型的
如果您只是希望在Java中不使用大量代码来执行此操作,请将所有要匹配的字符串放入一个集合中,然后检查目标字符串是否在集合中。您可以这样做
final String upperCaseCommand = e.getActionCommand().toUpperCase();
if(TAG_PLAY.equals(upperCaseCommand)
||TAG_PASSWORD.equals(upperCaseCommand)
||...
){
(当然,常数也需要大写
你也可以把它们放在一个散列中
if (tags.containsKey(upperCaseCommand))
如果添加保证不会添加重复项(或者即使它是——不管这里的
包含什么只需要找到一个),那么[Array]列表也会起作用。使用列表(相对于集合)的一个“优势”是Arrays.asList(TAG\u PLAY.toLowerCase(),TAG\u PADDWORD,…)
。就我个人而言,我对复制toLowerCase
感到厌烦,但遗憾的是Java缺少一个[n简单的]“映射”结构。对于微不足道的n,O(n)与O(1)的争论在这里基本上是无关紧要的。你也可以在一个语句中创建一个集合——新的HashSet(Arrays.asList(TAG\u PLAY.toLowerCase(),TAG\u PASSWORD.toLowerCase(),…).ActionCommand需要一个字符串(除非有办法更改),因此枚举会改进测试吗?@Jason,我想我误解了。我解释为“与getActionCommand无关”如果我不清楚的话,很抱歉,我的意思是,我只是说比较字符串,getaction命令就在我手边的代码示例中