Java 如何比较两个长度不同的字符串,并仅为1个无效字符返回false? public boolean setValidColor(字符串输入,字符串颜色){ int存在; isValidColor=true; char[]colorch=colors.toCharArray(); Arrays.sort(colorch); 对于(int i=0;i
我在比较两个不同长度的字符串时遇到问题,并且仅在一个无效输入的实例上返回false 例如: 可能的颜色为RGOPYB,输入颜色为YZOR。“Z”是不可能的,我需要代码返回false,但代码一直返回true。我哪里做错了Java 如何比较两个长度不同的字符串,并仅为1个无效字符返回false? public boolean setValidColor(字符串输入,字符串颜色){ int存在; isValidColor=true; char[]colorch=colors.toCharArray(); Arrays.sort(colorch); 对于(int i=0;i,java,Java,我在比较两个不同长度的字符串时遇到问题,并且仅在一个无效输入的实例上返回false 例如: 可能的颜色为RGOPYB,输入颜色为YZOR。“Z”是不可能的,我需要代码返回false,但代码一直返回true。我哪里做错了 编辑:这段代码不仅仅是这个(执行OOP),这只是一个我一直遇到问题的方法。数组。如果搜索的值应该插入到位置0,binarySearch将只返回-1。对于未找到的其他值,它将返回其他负值。测试exist
编辑:这段代码不仅仅是这个(执行OOP),这只是一个我一直遇到问题的方法。
数组。如果搜索的值应该插入到位置0,binarySearch
将只返回-1。对于未找到的其他值,它将返回其他负值。测试exist<0
而不是exists===-1
数组。如果要搜索的值应插入位置0,则binarySearch
仅返回-1。对于未找到的其他值,它将返回其他负值。从java.util.Arrays测试exist<0
而不是exists==-1
:
搜索键的索引(如果它包含在数组中);否则,((插入点)-1)。
意味着你的情况应该是:
if(存在<0)
从java.util.Arrays:
搜索键的索引(如果它包含在数组中);否则,((插入点)-1)。
意味着你的情况应该是:
if(存在<0)
我认为特德·霍普发现了你的问题
我只想指出,您当前的方法(排序和使用二进制搜索)可能比使用
colors.indexOf(input.charAt(I))
的简单O(N^2)
算法要慢得多。您可以通过“提升”已排序字符数组的创建来改进。(或者可能只需要将颜色
字符串作为先决条件进行排序。)但即使进行了此更改,如果颜色数组足够小,则索引
方法仍会更快
这一点的寓意是,如果不包含预期数据的现实特征,优化(尤其是过早优化)可能会使情况变得更糟
(现在可能“RGOPYB”并不表示实际的颜色数量。但如果是这样,你应该告诉我们…我认为Ted Hopp发现了你的问题
我只想指出,您当前的方法(排序和使用二进制搜索)可能比使用
colors.indexOf(input.charAt(I))
的简单O(N^2)
算法要慢得多。您可以通过“提升”已排序字符数组的创建来改进。(或者可能只需要将颜色
字符串作为先决条件进行排序。)但即使进行了此更改,如果颜色数组足够小,则索引
方法仍会更快
这一点的寓意是,如果不包含预期数据的现实特征,优化(尤其是过早优化)可能会使情况变得更糟
(现在可能“RGOPYB”并不表示实际的颜色数量。但如果是这样,您应该告诉我们…您可能希望将其转换为列表。然后可以使用Retainal或removeAll,查看列表是否为空/相同 比如:
if(exists < 0)
您可能希望将其转换为列表。然后可以使用Retainal或removeAll,查看列表是否为空/相同 比如:
if(exists < 0)
你能把这句话改成。。。有道理吗?将
String
s与String.equals()进行比较。。。看起来你正在尝试做一些与之非常不同的事情。你把这个复杂化了…我相信他把字符串当作一个字符集,所以顺序并不重要。我认为你可以用一个regexp在1-2行中完成这项工作,如果它只是检查有效性的话。我尝试了不同的比较方法。我已经做了嵌套for循环来比较这两个字符串,并且尝试了一个while循环。我的代码是我最近的一个。你能把它改成。。。有道理吗?将String
s与String.equals()进行比较。。。看起来你正在尝试做一些与之非常不同的事情。你把这个复杂化了…我相信他把字符串当作一个字符集,所以顺序并不重要。我认为你可以用一个regexp在1-2行中完成这项工作,如果它只是检查有效性的话。我尝试了不同的比较方法。我已经做了嵌套for循环来比较这两个字符串,并且尝试了一个while循环。我拥有的代码是我拥有的最新代码。所以我试着这么做。我没有提到这一点,但必须满足更多的条件。对于我正在做的事情,我从可能的列表中随机生成了一个4个字母的字符,并且我的输入必须是一个可能的字符,如果它与4个字母的列表匹配,则为真。假设我必须将我的输入BORG与BORG进行比较,并确保列表中包含有效字符。如果你只处理四个字母的测试,那么二进制搜索就太过分了。只需在方法中使用类似的内容:for(int i=input.length()-1;i>=0;--i)if(colors.indexOf(input.charAt(i))=-1)返回false;返回true所以我试着这么做。我没有提到这一点,但必须满足更多的条件。对于我正在做的事情,我从可能的列表中随机生成了一个4个字母的字符,并且我的输入必须是一个可能的字符
List validInput= input.retainAll(colors);
if(validInput.equals(input)) {
return true;
}
return false;