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?


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

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

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

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

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[]).


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].


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

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

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

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


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

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.