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


108

我想将a转换StringCharacter类的对象数组,但无法执行转换。我知道我可以使用该toCharArray()方法将String转换为原始数据类型类型为“ char”的数组,但这无助于将String转换为Character类型的对象数组。

我将如何去做?


6
“不适合字符数组”是什么意思?
barsju 2012年

您可以重新措辞还是多说一点,或者提供一个代码示例?
blackcompe'4

要转换charCharacter,请使用Character.valueOf(mychar)。如果是数组,则循环每个元素并进行转换。
ee。

Java需要一个map函数,lambda表达式。
埃里克·哈特福德

Answers:



66

一班

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(您需要强制说出它确实是a char,然后Java会将其自动装箱到Character
  • 通过调用获取结果数组 toArray()

33

为什么不自己写一点方法

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

2
为什么不自己写一点方法呢?因为已经存在一个方法(toCharArray()),并且已经存在的方法比从stackoverflow帖子中复制/粘贴的内容更多地致力于和对该功能的性能和可靠性感兴趣的工程师。
HoldOffHunger

1
@HoldOffHunger你绝对正确。但是toCharArray()返回数组的原始类型,而不是OP需要的Character对象。当然,您可以再次遍历char []以将其转换为Character []。但是,循环遍历创建Character对象的字符串广告非常简单,我不明白为什么如果您不想引入第三方库,不就自己滚动一下。
艾文(Alvin)2016年

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

4
这根本不是OP所要求的。
Qix-蒙尼卡(Monica)

3

String#toCharArray返回的数组char,您拥有的数组Character。在大多数情况下,如果你使用它并不重要char或者Character因为有自动装箱。您遇到的问题是数组未自动装箱,建议您使用char(char[])数组。


2

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


2

此方法以String作为参数并返回字符数组

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

1

另一种方法。

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

1

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

   //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);

将char数组转换为Character Array

 String givenString = "MyNameIsArpan";
char[] givenchararray = givenString.toCharArray();


     String.valueOf(givenchararray).chars().mapToObj(c -> 
                         (char)c).toArray(Character[]::new);

将char Array转换为Character Array的好处,可以使用Arrays.stream函数获取子数组

String subStringFromCharacterArray = 

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

0

如果您正在使用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]);


0

如果您不想依赖第三方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;
}

0

我在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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.