Java流即使在将int转换为String后也提供“无与伦比的类型:int和String”

时间:2018-09-29 23:25:29

标签: java

我有一个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;
    }

}

2 个答案:

答案 0 :(得分:1)

首先,您尝试从返回类型为int的函数返回countString):

公共静态字符串的出现检查器(字符串squareString,字符串criticalDigit)

第二行:

  int count = squareString.chars().filter(ch -> ch == criticalDigit).count();

criticalDigitString,而chint。 (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()