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