比较Java中的泛型类型,如果类型是字符串,如何忽略大写?
我在比较泛型类型时遇到了一个问题,我有一个条目,现在我必须将该键与另一个键进行比较,所以我没有考虑就等于比较Java中的泛型类型,如果类型是字符串,如何忽略大写?,java,comparison,case-insensitive,Java,Comparison,Case Insensitive,我在比较泛型类型时遇到了一个问题,我有一个条目,现在我必须将该键与另一个键进行比较,所以我没有考虑就等于 private DListNode<Entry<K,V>> findNode(K key){ DListNode<Entry<K, V>> node = head; while(node != null && !node.getElement().getKey().equals(key))
private DListNode<Entry<K,V>> findNode(K key){
DListNode<Entry<K, V>> node = head;
while(node != null && !node.getElement().getKey().equals(key))
node = node.getNext();
return node;
}
专用DListNode findNode(K键){
DListNode=头部;
while(node!=null&&!node.getElement().getKey().equals(key))
node=node.getNext();
返回节点;
}
!node.getElement().getKey().equals(key)
但问题是,很明显,如果我有一个字符串,caps大小写排除将不会发生。。。。当然不能使用equalsIgnoreCase
那么我怎样才能使它适用于每种类型?包括带大写的字符串专用DListNode findNode(K键){
private DListNode<Entry<K,V>> findNode(K key){
DListNode<Entry<K, V>> node = head;
while(node != null && !specialEquals(node.getElement().getKey(),key))
node = node.getNext();
return node;
}
private static boolean specialEquals(K key1, K key2) {
if( key1 instanceof String && key2 instanceof String ) {
return ((String) key1).equalsIgnoreCase((String) key2);
} else {
return key1.equals(key2);
}
}
DListNode=头部;
while(node!=null&!specialEquals(node.getElement().getKey(),key))
node=node.getNext();
返回节点;
}
专用静态布尔特殊相等(K键1,K键2){
if(字符串的key1实例和字符串的key2实例){
return((String)key1.equalsIgnoreCase((String)key2);
}否则{
返回键1.equals(键2);
}
}
专用DListNode findNode(K键){
DListNode=头部;
while(node!=null&!specialEquals(node.getElement().getKey(),key))
node=node.getNext();
返回节点;
}
专用静态布尔特殊相等(K键1,K键2){
if(字符串的key1实例和字符串的key2实例){
return((String)key1.equalsIgnoreCase((String)key2);
}否则{
返回键1.equals(键2);
}
}
如果这是一个真正的需求,那么我会想到两种逻辑解决方案
第一种选择是在插入时将映射中的所有键值转换为小写(或大写),这样就不必担心比较中的大小写问题
另一个选项是为每个键使用一个特殊的包装器,该键为您执行equals方法:
class CaseInsensitiveString {
private final String mystring;
public CaseInsensitiveString(String val) {
mystring = val;
}
public boolean equals(Object o) {
return o instanceof CaseSensitiveString
&& mystring.equalsIgnoreCase(((CaseInsensitiveString)o).getString())
}
public int hashCode() {
return mystring.tolowercase().hashCode();
}
public String toString() {
return mystring;
}
}
如果这是一个真正的需求,那么我会想到两个逻辑解决方案 第一种选择是在插入时将映射中的所有键值转换为小写(或大写),这样就不必担心比较中的大小写问题 另一个选项是为每个键使用一个特殊的包装器,该键为您执行equals方法:
class CaseInsensitiveString {
private final String mystring;
public CaseInsensitiveString(String val) {
mystring = val;
}
public boolean equals(Object o) {
return o instanceof CaseSensitiveString
&& mystring.equalsIgnoreCase(((CaseInsensitiveString)o).getString())
}
public int hashCode() {
return mystring.tolowercase().hashCode();
}
public String toString() {
return mystring;
}
}
最好的方法是使用
instanceof
关键字
while (node != null && node.getKey() != null) {
if (key instanceof String) {
String sKey = (String)key;
if (node.getKey() instanceof String) {
String nodeKeyString = (String)node.getKey();
if (nodeKeyString.equalsIgnoreCase(sKey)) {
return node;
}
}
} else if (node.getKey().equals(key)) {
return node;
} else {
node = node.getNext();
}
}
或者,如果您的键是可比的
,则可以自定义可比的
,以处理不区分大小写的字符串
键值
我希望这有帮助。最好的方法是使用
instanceof
关键字
while (node != null && node.getKey() != null) {
if (key instanceof String) {
String sKey = (String)key;
if (node.getKey() instanceof String) {
String nodeKeyString = (String)node.getKey();
if (nodeKeyString.equalsIgnoreCase(sKey)) {
return node;
}
}
} else if (node.getKey().equals(key)) {
return node;
} else {
node = node.getNext();
}
}
或者,如果您的键是可比的
,则可以自定义可比的
,以处理不区分大小写的字符串
键值
我希望这有帮助。是什么阻止您检查
getKey()
的结果是否为instanceof String
?这是一个泛型类型,我比较的是K。可以是字符串,但也可能不是。没有什么可以阻止我,但如果我这样做,我必须在之后进行转换,因此每次我要与键进行比较时,我都必须检查它们是否是字符串e的实例进行转换。。。。Java没有任何东西可以解决这种情况?哈!在上面的三条评论发布之前,我开始写我的答案。但实际上除了以某种方式使用instanceof
之外没有其他选择。是什么阻止您检查getKey()
的结果是否为instanceof String
?这是一种泛型,我比较的是K。可以是字符串,但也可能不是。没有什么可以阻止我,但如果我这样做,我必须在之后进行转换,因此每次我要与键进行比较时,我都必须检查它们是否是字符串e的实例进行转换。。。。Java没有任何东西可以解决这种情况?哈!在上面的三条评论发布之前,我开始写我的答案。但是除了以某种方式使用instanceof
之外,真的没有别的选择了。谢谢你。我想和你相比?如果我用compare to比较两个字符串,它将排除区分大小写的?否。String
具有compareTo
和compareTignoreCase
。谢谢。我想和你相比?如果我将两个字符串与compare to进行比较,它将排除区分大小写的?否。String
具有compareTo
和compareTignoreCase
。