有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java将字符数组中的搜索字符替换为其索引值(如果找到)

//这里我尝试在char数组中查找char的位置。 如果字符在数组中重新出现,则将其原始值替换为其整数索引。但是当我试图编译它时,我得到了一些不可打印的输出。所以请帮帮我。我的意思是,当我尝试访问数组元素时,必须看到上述操作的效果

class Re{

  public static void main(String [] args)

  {
    Scanner input = new Scanner(System.in);
    String enter = input.nextLine();
    char [] array = enter.toCharArray();
    char find = input.next().charAt(0);
    char find2 = Character.toUpperCase(find);
    char find3 = Character.toLowerCase(find); 
    for (int i=0;i<array.length;i++)
    {
      if((find2==array[i])|| ( find3==array[i]))
      {
        array[i] =  (char)(i);
      }
      else
      {
         array[i] =array[i];
       }
    }

    for(i=0;i<array.length;i++)
      {
         System.out.print(array[i]);
      }
  }
}

共 (2) 个答案

  1. # 1 楼答案

    你可以这样做:

        if ((find2 == array[i]) || (find3 == array[i])) {
            array[i] = find;
        } 
        else {
            array[i] = array[i];
       }
    
  2. # 2 楼答案

    Unicode有很多不可打印的字符。请参阅ASCII table了解您可能获得的字符(UTF-16的前127个字符与ASCII相同)。如果你想把一个整数转换成它对应的字符值,你能做的就是给它加上'0'

    例:

    if (find2 == array[i] || find3 == array[i]) {
        array[i] = (char)(i + '0');
    
    } // omit your else self-assignment, it is redundant
    

    如果我>;9那么它不能转换为数字字符(只有一位数),所以必须使用字符串

    例:

    String[] out = new String[array.length];
    for (int i = 0; i < array.length; i++) {
        if (array[i] == findUp || array[i] == findLo) {
            out[i] = String.valueOf(i);
        } else {
            out[i] = String.valueOf(array[i]);
        }
    }
    

    您还可以使用Character#forDigit形式的Character.forDigit(i, 10),它可以返回上面的表达式('0' + digit),如果数字是>;9('a' + digit - 10)或如果数字在基数之外,则为空字符。IE Character.forDigit(10, 10)返回空字符,但Character.forDigit(10, 16)(十六进制)返回'a'

    当您在字符和基本数字类型(int、short等)之间转换时,您使用的是Unicode码点。例如(char)9实际上是制表符。Unicode数字对应于代码48-57。因为这些数字是连续的(0对应48,1对应49,2对应50,等等),所以可以将'0'的值相加,得到相应的字符。例如48 + 2 = 50所以'0' + 2 = '2'。由于代数的原因,你当然也可以通过减法把一个字符转换成一个整数