【问题标题】:when finding whether a character is in a string or not error occurs查找字符是否在字符串中时发生错误
【发布时间】:2015-10-18 22:37:21
【问题描述】:

我尝试使用 contains 方法来查找字符是否在字符串中? 我得到错误:

类 String 中包含的方法不能应用于给定类型 如果(str.contains(ch)) 必需:字符序列 找到:字符

代码:

str1=rs.getString(1);
int len=str1.length();
while(i<len)
{
char ch=str1.charAt(i);
if (str.contains(ch))
continue;
else
str=str+str1.charAt(i);
i++;
}

【问题讨论】:

  • String 被定义为使用接口 CharSequence 的对象。 char 是原始数据类型,不能使用接口 CharSequence。这会导致您伤害String#contains 方法签名。

标签: java string char


【解决方案1】:

下面是java.lang.String.contains()方法的声明

public boolean contains(CharSequence s) 

所以你必须在将字符传递给函数之前将其转换为字符串

 Character ch = 'c';   
 str.contains(ch.toString());//converts ch to string and passes to the function

str.contains(ch+"");//converts  ch to string and passes to the function

正确的代码

    str1=rs.getString(1);
    int len=str1.length();
    while(i<len)
    {
    char ch=str1.charAt(i);
    if (str.contains(ch+""))//changed line
    continue;
    else
    str=str+str1.charAt(i);
    i++;
    }

【讨论】:

  • 这有点难看。我更喜欢 ch.toString() 而不是那种隐式转换。
  • @FlorianSchaetz 主要是 o/p 可能使用“char”而不是“Character”。
【解决方案2】:

这是因为String 没有为char 重载任何contains() 方法。
CharSequence 使用String.contains() 方法-

String ch = "b";
str.contains(ch);

她的CharSequenceinterfaceCharSequence 是一个可读的 char 值序列。此接口提供对许多不同类型的字符序列的统一只读访问。
JDK 的所有已知实现是:CharSequence 是 - CharBufferSegmentStringStringBufferStringBuilder

【讨论】:

    【解决方案3】:

    if ( str.indexOf( ch ) != -1 ) 应该可以工作。

    String.contains 只接受一个 CharSequence,但一个字符不是 CharSequence。上述方法也适用于 Characters。另一种方法,正如其他人所发布的(但我想多解释一点),将你的单个字符变成一个 CharSequence,例如通过创建一个字符串......

    String x = "" + b; // implicit conversion
    String y = Character.valueOf(ch).toString(); // explicit conversion
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-20
      • 1970-01-01
      • 2013-01-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多