【问题标题】:Converting String to "Character" array in Java在Java中将字符串转换为“字符”数组
【发布时间】:2012-04-17 20:50:49
【问题描述】:

我想将String 转换为Character 类的对象数组,但我无法执行转换。我知道我可以使用toCharArray() 方法将字符串转换为原始数据类型“char”的数组,但它对将字符串转换为Character 类型的对象数组没有帮助。

我该怎么做呢?

【问题讨论】:

  • “不适合字符数组”是什么意思?
  • 您能否重新措辞或表达更多,或者提供一个代码示例?
  • 要将char 转换为Character,请使用Character.valueOf(mychar)。如果是数组,则循环每个元素并进行转换。
  • java需要一个map函数,lambda表达式。
  • 这里是为您提供帮助的文章Convert Char Array To String In Java

标签: java arrays string character


【解决方案1】:

在这种情况下,您必须编写自己的方法。使用循环并使用charAt(i) 获取每个字符,并使用arrayname[i] = string.charAt[i] 将其设置为Character[] 数组。

【讨论】:

    【解决方案2】:

    为什么不自己写一个小方法

    public Character[] toCharacterArray( String s ) {
    
       if ( s == null ) {
         return null;
       }
    
       int len = s.length();
       Character[] array = new Character[len];
       for (int i = 0; i < len ; i++) {
          /* 
          Character(char) is deprecated since Java SE 9 & JDK 9
          Link: https://docs.oracle.com/javase/9/docs/api/java/lang/Character.html
          array[i] = new Character(s.charAt(i));
          */
          array[i] = s.charAt(i);
       }
    
       return array;
    }
    

    【讨论】:

    • 如果字符串很大,则会实例化太多字符对象。
    • 为什么不自己写一个小方法呢?因为一个方法已经存在(toCharArray()),并且已经存在的方法有更多的工程师致力于并有兴趣保证该函数的性能和可靠性,而不是从 stackoverflow 帖子中复制/粘贴的内容。
    • @HoldOffHunger 你是完全正确的。但是 toCharArray() 根据 OP 的需要返回原始类型的数组而不是 Character 对象。当然,您可以再次循环遍历 char[] 以将其转换为 Character[]。但是,循环创建 Character 对象的字符串广告是如此简单,如果您不想引入第三方库,我不明白为什么不自己滚动。
    • @realPK 如果字符串主要由 ASCII 字符组成,则不会,因为自动装箱使用 Character#valueOf(它为 ASCII 缓存对象)。
    【解决方案3】:

    使用这个:

    String str = "testString";
    char[] charArray = str.toCharArray();
    Character[] charObjectArray = ArrayUtils.toObject(charArray);
    

    【讨论】:

    • 我希望 ArrayUtils 在 JVM 中是标准的!
    • ArrayUtils 来自commons-lang,不是 JDK,对吧?
    【解决方案4】:

    String#toCharArray 返回一个char 的数组,你所拥有的是一个Character 的数组。在大多数情况下,使用charCharacter 并不重要,因为有autoboxing。您的问题是数组没有自动装箱,我建议您使用 char 数组 (char[])。

    【讨论】:

      【解决方案5】:

      另一种方法。

      String str="I am a good boy";
          char[] chars=str.toCharArray();
      
          Character[] characters=new Character[chars.length];
          for (int i = 0; i < chars.length; i++) {
              characters[i]=chars[i];
              System.out.println(chars[i]);
          }
      

      【讨论】:

        【解决方案6】:

        希望下面的代码对你有所帮助。

        String s="Welcome to Java Programming";
        char arr[]=s.toCharArray();
        for(int i=0;i<arr.length;i++){
            System.out.println("Data at ["+i+"]="+arr[i]);
        }
        

        它正在工作,输出是:

        Data at [0]=W
        Data at [1]=e
        Data at [2]=l
        Data at [3]=c
        Data at [4]=o
        Data at [5]=m
        Data at [6]=e
        Data at [7]= 
        Data at [8]=t
        Data at [9]=o
        Data at [10]= 
        Data at [11]=J
        Data at [12]=a
        Data at [13]=v
        Data at [14]=a
        Data at [15]= 
        Data at [16]=P
        Data at [17]=r
        Data at [18]=o
        Data at [19]=g
        Data at [20]=r
        Data at [21]=a
        Data at [22]=m
        Data at [23]=m
        Data at [24]=i
        Data at [25]=n
        Data at [26]=g
        

        【讨论】:

        • 这根本不是 OP 所要求的。
        【解决方案7】:

        如果您使用的是 JTextField,那么它会很有帮助..

        public JTextField display;
        String number=e.getActionCommand();
        
        display.setText(display.getText()+number);
        
        ch=number.toCharArray();
        for( int i=0; i<ch.length; i++)
            System.out.println("in array a1= "+ch[i]);
        

        【讨论】:

          【解决方案8】:

          链接总是最好的:D

          String str = "somethingPutHere";
          Character[] c = ArrayUtils.toObject(str.toCharArray());
          

          【讨论】:

          • chaining is always best 假。
          • ArrayUtils 不是 JDK 的一部分。
          【解决方案9】:

          此方法以字符串为参数,返回字符数组

          /**
           * @param sourceString
           *            :String as argument
           * @return CharcterArray
           */
          public static Character[] toCharacterArray(String sourceString) {
              char[] charArrays = new char[sourceString.length()];
              charArrays = sourceString.toCharArray();
              Character[] characterArray = new Character[charArrays.length];
              for (int i = 0; i < charArrays.length; i++) {
                  characterArray[i] = charArrays[i];
              }
              return characterArray;
          }
          

          【讨论】:

            【解决方案10】:

            一个带的班轮:

            String str = "testString";
            
            //[t, e, s, t, S, t, r, i, n, g]
            Character[] charObjectArray = 
                str.chars().mapToObj(c -> (char)c).toArray(Character[]::new); 
            

            它的作用是:

            • 获取字符的IntStream(您可能还想查看codePoints()
            • 将每个“字符”值映射到Character(您需要强制转换为实际上是char,然后Java 会自动将其装箱到Character
            • 通过调用toArray()获取结果数组

            【讨论】:

              【解决方案11】:

              如果您不想依赖第三方 API,这里有一个适用于 JDK7 或更低版本的工作代码。我没有像上面其他解决方案那样实例化临时字符对象。 foreach 循环更具可读性,看你自己:)

              public static Character[] convertStringToCharacterArray(String str) {
                  if (str == null || str.isEmpty()) {
                      return null;
                  }
                  char[] c = str.toCharArray();
                  final int len = c.length;
                  int counter = 0;
                  final Character[] result = new Character[len];
                  while (len > counter) {
                      for (char ch : c) {
                          result[counter++] = ch;
                      }
                  }
                  return result;
              }
              

              【讨论】:

                【解决方案12】:

                我在 java.io 中使用了 StringReader 类。其中一个函数read(char[] cbuf) 将字符串的内容读入数组。

                String str = "hello";
                char[] array = new char[str.length()];
                StringReader read = new StringReader(str);
                
                try {
                    read.read(array); //Reads string into the array. Throws IOException
                } catch (IOException e) {
                    e.printStackTrace();
                }
                
                for (int i = 0; i < str.length(); i++) {
                        System.out.println("array["+i+"] = "+array[i]);
                }
                

                运行它会给你输出:

                array[0] = h
                array[1] = e
                array[2] = l
                array[3] = l
                array[4] = o
                

                【讨论】:

                  【解决方案13】:

                  将字符串转换为字符数组,然后将字符数组转换回字符串

                     //Givent String
                     String given = "asdcbsdcagfsdbgdfanfghbsfdab";
                  
                     //Converting String to Character Array(It's an inbuild method of a String)
                     char[] characterArray = given.toCharArray();
                     //returns = [a, s, d, c, b, s, d, c, a, g, f, s, d, b, g, d, f, a, n, f, g, h, b, s, f, d, a, b]
                  

                  //一种方法:将字符数组转换回字符串

                    int length = Arrays.toString(characterArray).replaceAll("[, ]","").length();
                  
                    //First Way to get the string back
                    Arrays.toString(characterArray).replaceAll("[, ]","").substring(1,length-1)
                    //returns asdcbsdcagfsdbgdfanfghbsfdab
                    or 
                    // Second way to get the string back
                    Arrays.toString(characterArray).replaceAll("[, ]","").replace("[","").replace("]",""))
                   //returns asdcbsdcagfsdbgdfanfghbsfdab
                  

                  //第二种方式:将字符数组转回字符串

                  String.valueOf(characterArray);
                  

                  //第三种方式:转回字符数组为字符串

                  Arrays.stream(characterArray)
                             .mapToObj(i -> (char)i)
                             .collect(Collectors.joining());
                  

                  将字符串转换为字符数组

                  Character[] charObjectArray =
                                             givenString.chars().
                                                 mapToObj(c -> (char)c).
                                                 toArray(Character[]::new);
                  

                  将字符数组转换为字符数组

                   String givenString = "MyNameIsArpan";
                  char[] givenchararray = givenString.toCharArray();
                  
                  
                       String.valueOf(givenchararray).chars().mapToObj(c -> 
                                           (char)c).toArray(Character[]::new);
                  

                  char数组转字符数组的好处可以使用Arrays.stream函数获取子数组

                  String subStringFromCharacterArray = 
                  
                                Arrays.stream(charObjectArray,2,6).
                                            map(String::valueOf).
                                            collect(Collectors.joining());
                  

                  【讨论】:

                    【解决方案14】:

                    String[] arr = { "abc", "cba", "dac", "cda" };
                        Map<Character, Integer> map = new HashMap<>();
                        String string = new String();
                        for (String a : arr) {
                            string = string.concat(a);
                    
                        }
                        System.out.println(string);
                    
                        for (int i = 0; i < string.length(); i++) {
                            if (map.containsKey(string.charAt(i))) {
                                map.put(string.charAt(i), map.get(string.charAt(i)) + 1);
                    
                            } else {
                                map.put(string.charAt(i), 1);
                    
                            }
                        }
                        System.out.println(map);
                    

                    //输出 {a=4, b=2, c=4, d=2}

                    【讨论】:

                      猜你喜欢
                      • 2023-03-19
                      • 2012-10-20
                      • 1970-01-01
                      • 1970-01-01
                      • 2011-02-16
                      • 2016-06-03
                      • 1970-01-01
                      相关资源
                      最近更新 更多