【问题标题】:why is charAt(index)-1 function returning wrong output为什么 charAt(index)-1 函数返回错误的输出
【发布时间】:2021-05-07 15:09:51
【问题描述】:
    String s = "1234";
    for(int i=0;i<s.length();i++)
    {
        System.out.println(s.charAt(i));
        System.out.println(s.charAt(i)-1);  
    }

在上面的代码行中,对于第一次迭代,即当 i=0 时,第一行应该打印 1,第二行应该打印 0,但第二行打印 48。为什么会这样?

【问题讨论】:

  • char 执行算术运算时,会将其转换为int。字符 '1' 变为 int 49。
  • 添加到 khelwood,s.charAt(i)-1s.charAt(i-1)。但是,我猜这只会在您的第一个循环中抛出IndexOutOfBoundsException。第二行基本上是s.charAt(-1)

标签: java for-loop charat string-function


【解决方案1】:
s.charAt(i)-1

这一行获取索引i 处的字符并将其减一。你需要知道的第一件事是字符也有一个数值,你可以用它们做数学运算。字符“1”的 ASCII 值为 49(看表:https://www.cs.cmu.edu/~pattis/15-1XX/common/handouts/ascii.html)。因此,charAt(i) 调用返回代表1 的字符,其值为49,然后将其减少1,得到48

您需要在减少字符值之前将其转换为 Int。试试:

Character.getNumericValue(s.charAt(i)) - 1

【讨论】:

    【解决方案2】:

    我认为您遇到的问题是您获得了字符值。在对其进行任何数学运算之前,您应该尝试将字符串/字符转换为整数。

    【讨论】:

      【解决方案3】:

      Java 通常不对字符进行数学运算。因此,一旦您从 char 中减去 1,Java 就会首先将其转换为 int,然后从 int 中减去 1。正如另一个答案所解释的,'1' 被转换为 49,因此减法后得到 48。

      如果您想要'1' 之前的字符,只需在打印前转换回char

          String s = "1234";
          for (int i = 0; i < s.length(); i++) {
              System.out.println(s.charAt(i));
              System.out.println((char) (s.charAt(i) - 1));
          }
      

      输出:

      1
      0
      2
      1
      3
      2
      4
      3
      

      然后它也适用于字母和标点符号:

          String s = "Wtf?";
      
      W
      V
      t
      s
      f
      e
      ?
      >
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-07-27
        • 2021-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多