Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java seqSearchFunction(字符串s、字符c)_Java_Arrays_String_Char - Fatal编程技术网

Java seqSearchFunction(字符串s、字符c)

Java seqSearchFunction(字符串s、字符c),java,arrays,string,char,Java,Arrays,String,Char,我正在尝试创建两个函数。第一:如果c变量在字符串变量中至少出现一次,则显示“true”。二:相同的功能,但显示字母的位置。更具体地说,seqSearchPos函数(字符串s,字符c)在c出现在s中时进行搜索。 函数将c的位置返回给s(如果存在)。如果c不存在,该函数将 返回-1 很遗憾,我不知道如何解决这个问题,这个关于字符串和字符的具体问题。一定有一个我仍然不知道的方法可以帮助我解决这个问题 public static boolean seqSearch(String s, char c) {

我正在尝试创建两个函数。第一:如果c变量在字符串变量中至少出现一次,则显示“true”。二:相同的功能,但显示字母的位置。更具体地说,seqSearchPos函数(字符串s,字符c)在c出现在s中时进行搜索。 函数将c的位置返回给s(如果存在)。如果c不存在,该函数将 返回-1

很遗憾,我不知道如何解决这个问题,这个关于字符串和字符的具体问题。一定有一个我仍然不知道的方法可以帮助我解决这个问题

public static boolean seqSearch(String s, char c) {
       boolean found=false;
       if(s.equals(c)) {
           found=true;
       }
       return found;
   }

主要内容:


我希望在第一个位置和第二个位置1上都能显示真实
但是它分别显示为false和-1。

这行代码中有一个bug:

if(s.equals(c)) {
它将整个字符串与字符进行比较,但它(显然)不匹配

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

if (s.charAt(i) == c) {
另外,您还可以直接从
if
语句中使用
return
。这将允许您删除
位置
变量,并使代码稍微短一些:

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;
}

或者,更好的方法是直接调用该字符串方法,而不是将其包装到自己的函数中。

您应该能够在此处找到答案:

其中一个答案还涉及角色的位置

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

实际上您正在尝试实现String类的
contains(char)
indexOf(char)
方法

您正在将整个字符串与单个字符进行比较。如果字符串的长度不是1,您的方法将始终返回false。若要更正此问题,您应该迭代字符串的每个字符。您可以使用==运算符比较两个字符

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;
公共静态布尔seqSearch(字符串s,字符c){
布尔值=false;

对于(inti=0;i,正如其他人指出的那样,您的问题是您将整个字符串
s
与字符
c
进行比较,这总是错误的

以下是使用Java Streams的方法的两种实现:

public static boolean seqSearch(String string, char character) {
    return string.chars().anyMatch(c -> c == character);
}
这将创建一个
IntStream
,其中包含所有返回true的字符(如果其中任何字符为true)

public static int seqSearchPos(String string, char character) {
    return IntStream.range(0, string.length())
            .filter(i -> string.charAt(i) == character)
            .findFirst()
            .orElse(-1);
}
在这里,您可以创建一个从
0
n-1
IntStream
,如果找到字符,则返回第一个索引。如果没有找到字符,则返回
-1

除此之外,您还可以使用本机方法,它完全满足您的需要:

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;
}
或者,您可以使用本机方法来实现:

public static boolean seqSearch(String string, char character) {
    return string.contains(String.valueOf(character));
}

提示:它们是完全相同的方法,并且应该以相同的方式工作。唯一的区别是它们在找到/未找到字符时返回的内容。如果可能,请您以更简单的方式解释字符串.indexOf()好吗?我似乎不理解这一点,也不理解int indexOf(int ch).在Java中,
char
实际上是一个整数(0到65535),可以像
int
(范围更广)一样使用并分配给
String.indexOf(int c)
方法采用
int
而不是
char
,因此它可以处理现代Unicode字符,如smilies,将字符代码扩展到
char
的边界之外。但您仍然可以使用
char
调用该方法。
public static boolean seqSearch(String string, char character) {
    return string.chars().anyMatch(c -> c == character);
}
public static int seqSearchPos(String string, char character) {
    return IntStream.range(0, string.length())
            .filter(i -> string.charAt(i) == character)
            .findFirst()
            .orElse(-1);
}
public static int seqSearchPos(String string, char character) {
    return string.indexOf(character);
}
public static boolean seqSearch(String string, char character) {
    return string.indexOf(character) >= 0;
}
public static boolean seqSearch(String string, char character) {
    return string.contains(String.valueOf(character));
}