我有一个Java类,该类将0到给定数字之间的所有数字平方。然后使用String.valueOf(number)将每个平方数转换为字符串。给定的数字也将转换为字符串。然后将平方数和给定的数字(都转换为字符串)传递到一个函数中,该函数应该使用流来计算该数字在平方数中以String形式出现在String中的次数。但是,进行这种比较时,Java给了我错误:
incomparable types: int and String
int count = squareString.chars().filter(ch -> ch == criticalDigit).count();
当int已经转换为字符串时,为什么此流会给我这个错误?我如何成功计算一个字符串数字出现在int字符串中的次数?
我当前拥有的代码是:
import java.util.stream.*;
public class CountDig {
public static int nbDig(int n, int d) {
int[] squaredNumbers = new int[n];
int number = 0;
String strV = String.valueOf(d);
int totalCount = 0;
for (int i = 0; i < n; i++) {
number = i * 2;
String squaredString = String.valueOf(number);
totalCount += occurrenceChecker(squaredString, strV);
}
return totalCount;
}
public static int occurrenceChecker(String squareString, String criticalDigit) {
int count = squareString.chars().filter(ch -> ch == criticalDigit).count();
return count;
}
}
答案 0 :(得分:1)
首先,您尝试从返回类型为int
的函数返回count
(String
):
公共静态字符串的出现检查器(字符串squareString,字符串criticalDigit)
第二行:
int count = squareString.chars().filter(ch -> ch == criticalDigit).count();
criticalDigit
是String
,而ch
是int
。 (chars()
返回“ 此序列的char值的IntStream ”)
另一种方法将使用indexOf
函数对给定的String
进行计数:
public static String occurrenceChecker(String squareString, String criticalDigit) {
int temp = 0;
int count = 0;
while(squareString.indexOf(criticalDigit, temp) != -1) {
count++;
temp = squareString.indexOf(criticalDigit, temp) + criticalDigit.length();
}
return Integer.toString(count);
}
这是假设您要返回结果的String
表示形式
答案 1 :(得分:1)
chars()返回IntStream,因此ch在Lambda表达式中为整数
如果方法nbDig上的d从'0'到'9',则下面的代码有效。
squareString.chars().filter(ch -> ch == criticalDigit.charAt(0)).count()
否则,您应该更改算法。
ok如果d可以是多个数字。下面的代码可以帮助您。
squareString.chars().filter(ch -> criticalDigit.indexOf(ch) != -1).count()