Java中将字符串转换为“字符”数组

135
我想将一个 String 转换为由 Character 类对象组成的数组,但我无法进行转换。虽然我知道可以使用 toCharArray() 方法将 String 转换为由原始数据类型 "char" 组成的数组,但它并不能帮助我将 String 转换为由 Character 类型对象组成的数组。

我该如何实现这个功能?


6
“doesn't fit with the character array” 的意思是“与字符数组不匹配”。 - barsju
你能否重新措辞或更详细地表达一下,或者提供一个代码示例? - blackcompe
要将 char 转换为 Character,请使用 Character.valueOf(mychar)。如果它是一个数组,请循环每个元素并进行转换。 - ee.
Java需要一个Map函数和Lambda表达式。 - Eric Hartford
这是一篇有关编程的文章,可以帮助您了解如何在Java中将字符数组转换为字符串。**将字符数组转换为字符串在Java中**。 - Rahul Gupta
14个回答

221

使用这个:

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

33
希望ArrayUtils能够成为JVM标准库! - Alvin
7
ArrayUtils 是来自于 commons-lang 而不是 JDK,对吗? - Eric
是的,org.apache.commons.lang - java dev

93

一行代码,包含

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'值映射到Character上(你需要进行强制转换来确保它实际上是一个char,然后Java会自动将其装箱为Character
  • 通过调用toArray()获取结果数组

34

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

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;
}

如果是一个巨大的字符串,将会实例化太多的字符对象。 - realPK
3
为什么不自己编写一个小函数?因为已经存在一个函数(toCharArray()),并且这个已经存在的函数有更多的工程师致力于和感兴趣于保证该函数的性能和可靠性,而这比从stackoverflow网站上复制/粘贴的代码更可靠。 - HoldOffHunger
1
@HoldOffHunger 你说得完全正确。然而,toCharArray() 返回的是原始类型的数组,而不是 OP 所需的 Character 对象。当然,你可以再次循环遍历 char[] 将其转换为 Character[]。但是,通过字符串循环并创建 Character 对象是如此简单,我不明白为什么不自己编写代码,如果你不想引入第三方库的话。 - Alvin
@realPK 如果字符串主要由ASCII字符组成,则不需要自动装箱,因为它使用Character#valueOf(为ASCII缓存对象)。 - Flávio Etrusco

7

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

   //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数组转换为Character数组的好处是,您可以使用Arrays.stream函数获取子数组

String subStringFromCharacterArray = 

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

3
我希望下面的代码能对你有所帮助。
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

4
这完全不是原帖所询问的。 - Qix - MONICA WAS MISTREATED

3

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


3

String#toCharArray 返回一个 char 数组,而你拥有的是一个 Character 数组。在大多数情况下,使用 charCharacter 都没有关系,因为有 自动装箱。但在你的情况下,问题在于数组不会自动装箱,建议你使用一个 char 数组(char[])。


2

另一种做法。

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]);
    }

2

这个方法接受一个字符串作为参数,并返回字符数组

/**
 * @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;
}

0

链式编程总是最好的 :D

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

1
链接总是最好的。错误。 - Qix - MONICA WAS MISTREATED
2
ArrayUtils 不是 JDK 的一部分。 - mbmast

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接