【问题标题】:Using charAt() to change a char array使用 charAt() 更改 char 数组
【发布时间】:2013-04-18 06:44:13
【问题描述】:

我完全不明白为什么charAt() 在某些情况下有效,而在其他情况下无效。我在学习 Java 时正在做练习,其中一个是取一个字符串,然后以相反的顺序返回它。

我的工作代码:

public String reverseString(String tempStr){
    int initialindex = tempStr.length()-1;
    int reverseindex = 0;
    char tmp;
    char[] array = new char[tempStr.length()];

    for(int tempchar : array){
        tmp = tempStr.charAt(initialindex);
        array[reverseindex] = tmp;
        initialindex--;
        reverseindex++;
    }
    String returnstr = new String(array);
    return returnstr;
}

我遇到的问题是使用下面的for 语句打印乱码:

for(int tempchar : array){
    array[reverseindex] = tempStr.charAt(initialindex);
    initialindex--;
    reverseindex++;
}

使用while 循环、标准for 循环和其他一些丑陋且不起作用的代码版本可能有十几种不同的变体。为什么我创建了一个char tmp 字段,将检查的字符放入该字段,然后使用该字段将数据输入到数组中?

另外,为什么我不能只使用return array.toString(); 返回字符串?

编辑:我正在使用我今天下载的最新 Eclipse,从 netbeans 切换。

【问题讨论】:

    标签: java arrays char


    【解决方案1】:
    1. 我将您的代码复制到我的编辑器中,使用任一版本(无论是否带有tmp 字段)都能正常运行。您一定是使用其他方法犯了其他错误。

    2. Java 不支持漂亮的 .toString() 数组;任何不覆盖toString 的对象都将生成对象的hashCode,而不是对象的内容/字段,数组在这里也不例外。虽然对于字符数组似乎是明智的,但对 int 数组进行相同的操作会产生废话;查看Arrays.toString()String.valueOf(array) 之间的区别。在这种情况下,您可能希望使用String.valueOf 方法。

    【讨论】:

    • 嗯...我尝试了另一种方法,但我很烦。现在可以了。关于第二个答案,我返回了 [C@3956f14c 的值。那是你提到的对象的hashCode吗?
    • 根据实现的不同,Object.toString() 的默认函数将返回this.getClass().getName() + '@' + Integer.toHexString(this.hashCode());(或一些类似的变体)。所以我猜在这种情况下,[C 是“数组”(因为它们是一种特殊的对象),3956f14c 是哈希码
    【解决方案2】:

    array.toString() 返回对象的字符串表示形式。您需要使用 String new String(array) 的 char[] 构造函数从 char[] 创建 String。

    【讨论】:

      【解决方案3】:

      作为开始的提示:如果要将char 数组转换为String,请使用采用char 数组的String 构造函数。

      更新:我看到您在编辑中已经这样做了。它现在是否按预期工作?

      你的循环看起来有点奇怪,因为你从不使用你的循环变量。你可以试试这个:

      char[] initialArray = initialStr.toCharArray();
      char[] array = new char[tempStr.length()];
      
      for(int srcIndex = 0, destIndex = array.length-1; destIndex >= 0; srcIndex++, destIndex--) {
          array[destIndex] = initialArray[srcIndex];
      }
      

      【讨论】:

      • 是的,我应该使用它。但当时我想在圆孔里敲一个方钉,所以我只是用钝力来完成它。不好的做法,但我的耐心已经被一个看似简单的问题所消耗。
      【解决方案4】:
         public String reverse(String str)
              {
                  if(str == null)
                  {
                     return null;
                   }
                 byte[] byteArray=  str.getBytes();
                 int arrayLastIndex = byteArray.length -1 ;
      
                 for(int i=0 ; i < byteArray.lenght/2: i++)
                 {
                    byte temp = byteArray[i];
                    byteArray[i] = byteArray[arrayLastIndex -i ]
                    byteArray[arrayLastIndex - i] = temp;
                 }
      
                 return new String(byteArray);
              }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-04-27
        • 1970-01-01
        • 2017-02-26
        • 2017-02-19
        • 1970-01-01
        • 1970-01-01
        • 2021-11-25
        • 2017-04-13
        相关资源
        最近更新 更多