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

Posted

技术标签:

【中文标题】在Java中将字符串转换为“字符”数组【英文标题】:Converting String to "Character" array in 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 【参考方案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()),并且已经存在的方法有更多的工程师致力于并有兴趣保证该函数的性能和可靠性,而不是从 *** 帖子中复制/粘贴的内容。 @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】:

一个带java-8的班轮:

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

【讨论】:

以上是关于在Java中将字符串转换为“字符”数组的主要内容,如果未能解决你的问题,请参考以下文章

如何在Java中将对象数组转换为字符串数组

在java中将字符串数组元素转换为字节数组[重复]

如何在java中将字符串数组转换为int数组[重复]

在Java中将句子字符串转换为单词的字符串数组

如何在java中将字符串集合转换为字符串数组[重复]

在Java 8中将整数数组转换为字符串数组的最简单方法[重复]