Convertendo String em array “Character” em Java

108

Quero converter a Stringem um array de objetos da classe Character, mas não consigo realizar a conversão. Eu sei que posso converter uma String em uma matriz de tipo de dados primitivo "char" com o toCharArray()método, mas não ajuda na conversão de uma String em uma matriz de objetos do tipo Character .

Como eu faria para fazer isso?

kgd
fonte
6
O que você quer dizer com "não se encaixa na matriz de caracteres"?
Barsju
Você pode reformular isso ou articular um pouco mais, ou talvez fornecer um exemplo de código?
blackcompe
Para converter charpara Character, use Character.valueOf(mychar). Se for uma matriz, faça um loop em cada elemento e converta.
ee.
java precisa de uma função de mapa, expressões lambda.
Eric Hartford

Respostas:

184

Usa isto:

String str = "testString";
char[] charArray = str.toCharArray();
Character[] charObjectArray = ArrayUtils.toObject(charArray);
Kuldeep Jain
fonte
27
Desejo que ArrayUtils seja padrão em JVMs!
Alvin
4
ArrayUtilsé de commons-lang, não JDK, certo?
Eric Wang
66

Um forro com :

String str = "testString";

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

O que faz é:

  • pegue um IntStreamdos personagens (você pode querer também dar uma olhada codePoints())
  • mapear cada valor de 'caractere' para Character(você precisa lançar para realmente dizer que é realmente um char, e então o Java irá encaixá-lo automaticamente Character)
  • obter a matriz resultante chamando toArray()
Alexis C.
fonte
33

Por que não escrever um pouco de método você mesmo

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;
}
Alvin
fonte
Muitos objetos de personagem serão instanciados se for uma string enorme.
realPK
2
Por que não escrever um pouco de método sozinho? Porque um método já existe (toCharArray ()), e o método que já existe tem muito mais engenheiros dedicados e interessados ​​em garantir o desempenho e a confiabilidade dessa função, do que o que pode ser copiado / colado de um post stackoverflow.
HoldOffHunger
1
@HoldOffHunger Você está absolutamente certo. No entanto, toCharArray () retorna o tipo primitivo de array em vez do objeto Character conforme a necessidade do OP. Claro, você pode percorrer o char [] novamente para convertê-lo em Character []. Mas, fazer um loop em um anúncio de string criando um objeto Character é tão simples que não vejo por que não lançar o seu próprio se não quiser trazer uma biblioteca de terceiros.
Alvin
6

Espero que o código abaixo ajude você.

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

Está funcionando e a saída é:

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
JDGuide
fonte
4
Não era isso que o OP estava pedindo.
Qix - MONICA ERA MISTREADA EM
3

String#toCharArrayretorna um array de char, o que você tem é um array de Character. Na maioria dos casos, não importa se você usa charou Characterporque há autoboxing . O problema no seu caso é que os arrays não são autoboxed, sugiro que você use um array de char ( char[]).

Sandro
fonte
2

Você tem que escrever seu próprio método neste caso. Use um loop e obtenha cada caractere usando charAt(i)e configure-o para seu Character[]array usando arrayname[i] = string.charAt[i].

Chandra Sekhar
fonte
2

Este método toma String como argumento e retorna o 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;
}
Loknath
fonte
1

outra maneira de fazer isso.

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]);
    }
Balaswamy Vaddeman
fonte
1

Conversão de string em matriz de caracteres e, em seguida, convertendo a matriz de caracteres de volta em 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 MANEIRA: convertendo de volta a matriz de caracteres em 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

// Segunda maneira: convertendo de volta a matriz de caracteres em string

String.valueOf(characterArray);

// Terceira maneira: convertendo de volta a matriz de caracteres em string

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

Converter string em array de caracteres

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

Convertendo matriz char em matriz de caracteres

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


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

benefícios de converter matriz de char em matriz de caracteres, você pode usar a função Arrays.stream para obter a submatriz

String subStringFromCharacterArray = 

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

se você estiver trabalhando com JTextField, pode ser útil.

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]);
M.Shams Tabrez
fonte
0

encadear é sempre melhor: D

String str = "somethingPutHere";
Character[] c = ArrayUtils.toObject(str.toCharArray());
ak_2050
fonte
1
chaining is always bestFalso.
Qix - MONICA ERA MISTREADA EM
1
ArrayUtils não faz parte do JDK.
mbmast
0

Se você não quiser depender de APIs de terceiros, aqui está um código de trabalho para JDK7 ou abaixo. Não estou instanciando Objetos de Personagem temporários como feito por outras soluções acima. os loops foreach são mais legíveis, veja você mesmo :)

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;
}
realPK
fonte
0

Eu usei o StringReader classe em java.io . Uma de suas funções read(char[] cbuf)lê o conteúdo de uma string em um array.

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

Executá-lo fornece o resultado:

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