为了账号安全,请及时绑定邮箱和手机立即绑定

seqSearchFunction(String s,char c)

seqSearchFunction(String s,char c)

HUWWW 2022-09-14 15:32:10
我正在尝试创建两个函数。一:如果 c 变量在 String 变量中至少出现一次,则显示“true”。二:函数相同,但显示字母的位置。更具体地说,如果 c 出现在 s 中,seqSearchPos 函数(字符串 s,字符 c)将搜索 c 的位置,如果存在,函数会将 c 的位置返回到 s。如果 c 不存在,则该函数将返回 -1。可悲的是,不知道如何解决这个问题,这个关于字符串和char的特定问题。一定有一个我仍然不知道的方法可以帮助我解决这个问题public static boolean seqSearch(String s, char c) {       boolean found=false;       if(s.equals(c)) {           found=true;       }       return found;   }主要:String s="e";char c='e';System.out.println(seqSearch(s,c));public static int seqSearchPos(String s,char c) {       int position=-1;       for(int i=0; i<s.length(); i++) {           if(s.equals(c)) {               position=i;               break;           }       }       return position;   }主要:String s="hello";char c='e';System.out.println(seqSearchPos(s,c));我期望在第一个和第二个位置1中显示真,但它分别显示假和-1。
查看完整描述

4 回答

?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

这行代码中有一个错误:


if(s.equals(c)) {

它正在将整个字符串与字符进行比较,并且(显然)不匹配。


您需要比较字符串中索引处的单个字符:


if (s.charAt(i) == c) {

顺便说一句,您也可以直接从语句中使用。这将允许您删除变量并使代码更短一些:returnifposition


public static int seqSearchPos(String s, char c) {

    for (int i = 0; i < s.length(); i++) {

        if (s.charAt(i) == c) {

            return i;

        }

    }

    return -1;

}

还有一个字符串.indexOf(int c) 方法,它完全可以满足您的需求,并允许您像这样编写该方法:


public static int seqSearchPos(String s, char c) {

    return s.indexOf(c);

}

或者,更好的是,只需直接调用该 String 方法,而不是将其包装在您自己的函数中。


查看完整回答
反对 回复 2022-09-14
?
青春有我

TA贡献1784条经验 获得超8个赞

你应该能够在这里找到你的答案:如何检查字符串中是否出现一个字符?

其中一个答案还谈到了角色的位置。

他们基本上正在使用默认的字符串库,即:String.contains()String.indexOf()


查看完整回答
反对 回复 2022-09-14
?
茅侃侃

TA贡献1842条经验 获得超21个赞

实际上,您正在尝试实现字符串类的方法。contains(char)indexOf(char)


您正在将整个字符串与单个字符进行比较。如果字符串的长度不是 1,则您的方法将始终返回 false。要纠正这一点,您应该迭代 String 的每个字符,并且您可以使用 == 运算符比较两个 char。


public static boolean seqSearch(String s, char c) {

   boolean found=false;

   for(int i=0;i<s.length();i++){

     if(s.charAt(i)==c) {

        found=true;

     }

   }

   return found;

}


同样的问题也存在于你的第二期中,你应该比较每个字符。


public static int seqSearchPos(String s,char c) {

   int position=-1;

   for(int i=0; i<s.length(); i++) {

       if(s.charAt(i)==c) {

           position=i;

           break;

       }

   }

   return position;

}


查看完整回答
反对 回复 2022-09-14
?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

正如其他人所指出的,你的问题是你将整个字符串与字符进行比较,这总是假的。sc


以下是使用 Java 流的方法的两个实现:


public static boolean seqSearch(String string, char character) {

    return string.chars().anyMatch(c -> c == character);

}

这将创建一个包含所有返回 true 的字符(如果其中任何一个为 true)。IntStream


public static int seqSearchPos(String string, char character) {

    return IntStream.range(0, string.length())

            .filter(i -> string.charAt(i) == character)

            .findFirst()

            .orElse(-1);

}

在这里,您将创建一个 from to,如果找到该 char,则返回第一个索引。如果不是,则返回 。IntStream0n - 1-1


除此之外,您还可以使用本机 String.indexOf() 方法,该方法完全符合您的要求:


public static int seqSearchPos(String string, char character) {

    return string.indexOf(character);

}

您也可以将此方法用于您的方法:seqSearch()


public static boolean seqSearch(String string, char character) {

    return string.indexOf(character) >= 0;

}

或者,您可以使用本机字符串.contain() 方法来实现此目的:


public static boolean seqSearch(String string, char character) {

    return string.contains(String.valueOf(character));

}


查看完整回答
反对 回复 2022-09-14
  • 4 回答
  • 0 关注
  • 86 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信