简体   繁体   English

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

[英]Converting String to "Character" array in Java

I want to convert a String to an array of objects of Character class but I am unable to perform the conversion.我想将String转换为Character class 的对象数组,但我无法执行转换。 I know that I can convert a String to an array of primitive datatype type "char" with the toCharArray() method but it doesn't help in converting a String to an array of objects of Character type.我知道我可以使用toCharArray()方法将 String 转换为原始数据类型“char”的数组,但它无助于将 String 转换为Character类型的对象数组。

How would I go about doing so?请问我go怎么办呢?

Use this:用这个:

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

One liner with :一个带的班轮:

String str = "testString";

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

What it does is:它的作用是:

  • get an IntStream of the characters (you may want to also look at codePoints() )获取字符的IntStream (您可能还想查看codePoints()
  • map each 'character' value to Character (you need to cast to actually say that its really a char , and then Java will box it automatically to Character ) map 将每个“字符”值转换为Character (您需要强制转换以实际说明它确实是一个char ,然后 Java 会自动将其装箱为Character
  • get the resulting array by calling toArray()通过调用toArray()获取结果数组

Why not write a little method yourself为什么不自己写一个小方法

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

Converting String to Character Array and then Converting Character array back to 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]

//ONE WAY: Converting back Character array to String //一种方法:将字符数组转换回字符串

  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

//Second WAY: Converting back Character array to String //第二种方式:将字符数组转换回字符串

String.valueOf(characterArray);

//Third WAY: Converting back Character array to String //第三种方式:将字符数组转换回字符串

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

Converting string to Character Array将字符串转换为字符数组

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

Converting char array to Character Array将字符数组转换为字符数组

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


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

benefits of Converting char Array to Character Array you can use the Arrays.stream funtion to get the sub array将字符数组转换为字符数组的好处您可以使用 Arrays.stream 函数获取子数组

String subStringFromCharacterArray = 

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

You have to write your own method in this case.在这种情况下,您必须编写自己的方法。 Use a loop and get each character using charAt(i) and set it to your Character[] array using arrayname[i] = string.charAt[i] .使用循环并使用charAt(i)获取每个字符,并使用arrayname[i] = string.charAt[i]将其设置为您的Character[]数组。

String#toCharArray returns an array of char , what you have is an array of Character . String#toCharArray返回一个char数组,你拥有的是一个Character数组。 In most cases it doesn't matter if you use char or Character as there is autoboxing .在大多数情况下,使用charCharacter并不重要,因为有autoboxing The problem in your case is that arrays are not autoboxed, I suggest you use an array of char ( char[] ).你的问题是 arrays 没有自动装箱,我建议你使用一个 char 数组( char[] )。

I hope the code below will help you.我希望下面的代码对您有所帮助。

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

It's working and the output is:它正在工作,output 是:

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

another way to do it.另一种方法来做到这一点。

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

This method take String as a argument and return the Character Array此方法以字符串为参数并返回字符数组

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

if you are working with JTextField then it can be helpfull..如果您正在使用 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]);

chaining is always best:D链接总是最好的:D

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

If you don't want to rely on third party API's, here is a working code for JDK7 or below.如果您不想依赖第三方 API,这里是 JDK7 或更低版本的工作代码。 I am not instantiating temporary Character Objects as done by other solutions above.我没有像上面其他解决方案那样实例化临时角色对象。 foreach loops are more readable, see yourself:) 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;
}

I used the StringReader class in java.io .我在 java.io 中使用了StringReader class One of it's functions read(char[] cbuf) reads a string's contents into an array.其中一个函数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]);
}

Running this gives you the output:运行它会得到 output:

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

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

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM