conversão de string em string em java

115

Eu string = "name"; quero converter em uma matriz de string. Como eu faço isso? Existe alguma função Java integrada? Eu posso fazer isso manualmente, mas estou procurando por uma função Java integrada.

Eu quero um array onde cada caractere da string será uma string. como char 'n' agora será a string "n" armazenada em um array.

riyana
fonte
10
Eu acho que você não quer dizer String[] ary = new String[] { "name" };, de que operação você precisa? divisão em personagens, por exemplo?
rsp
Você quer dizer uma matriz de string? Como você poderia ter uma função para isso, seria apenas: String [] array = {"Name"}; ou você quer dizer uma matriz de caracteres?
Woody
1
Eu quero uma matriz onde cada caractere da string será uma string. como char 'n' será agora a string "n" armazenada em uma matriz
riyana

Respostas:

199

Para começar sua tarefa, String.splitdivide as strings em uma expressão regular e essa expressão pode ser uma string vazia:

String[] ary = "abc".split("");

Rende a matriz:

(java.lang.String[]) [, a, b, c]

Livrar-se da primeira entrada vazia é deixado como um exercício para o leitor :-)

Nota: No Java 8, o primeiro elemento vazio não está mais incluído.

rsp
fonte
21
Nota: Usando jdk8, a primeira entrada vazia não é mais incluída na matriz resultante. Consulte stackoverflow.com/questions/22718744/…
Alexis C.
42
String strName = "name";
String[] strArray = new String[] {strName};
System.out.println(strArray[0]); //prints "name"

A segunda linha aloca uma matriz String com o comprimento de 1. Observe que você não precisa especificar um comprimento, como:

String[] strArray = new String[1];

em vez disso, o comprimento é determinado pelo número de elementos no inicializador. Usando

String[] strArray = new String[] {strName, "name1", "name2"};

cria uma matriz com comprimento de 3.

f1sh
fonte
22
Realmente não responde à pergunta.
atamanroman
1
Verifique o histórico de revisão da pergunta e você verá que a pergunta está pedindo algo diferente antes de ser editada. Esta resposta responde à primeira versão.
f1sh
14

Supondo que você realmente deseja uma matriz de strings de caractere único (não um char[]ou Character[])

1. Usando um regex:

public static String[] singleChars(String s) {
    return s.split("(?!^)");
}

O lookahead negativo de largura zero evita a correspondência de padrões no início da entrada, para que você não obtenha uma string vazia inicial.

2. Usando Goiaba :

import java.util.List;

import org.apache.commons.lang.ArrayUtils;

import com.google.common.base.Functions;
import com.google.common.collect.Lists;
import com.google.common.primitives.Chars;

// ...

public static String[] singleChars(String s) {
    return
        Lists.transform(Chars.asList(s.toCharArray()),
                        Functions.toStringFunction())
             .toArray(ArrayUtils.EMPTY_STRING_ARRAY);
}
Finnw
fonte
1
Essa regexp é a melhor IMO. Esteja ciente de que o Java 8 corrigiu esse problema específico de qualquer maneira.
shkschneider
13

Acho que simplesmente não há necessidade disso, pois não ficará mais simples do que

String[] array = {"name"};

Claro, se você insistir, você pode escrever:

static String[] convert(String... array) {
   return array;
}

String[] array = convert("name","age","hobby"); 

[Editar] Se desejar Strings de uma letra, você pode usar:

String[] s = "name".split("");

Infelizmente s [0] estará vazio, mas depois disso as letras n, a, m, e virão. Se isso for um problema, você pode usar, por exemplo, System.arrayCopy para se livrar da primeira entrada do array.

Landei
fonte
Eu quero uma matriz onde cada caractere da string será agora uma string. como char 'n' será agora a string "n" armazenada em uma matriz
riyana
@Landei Eu tenho esta String date = "2013/01/05" e quando eu uso .split ("/"), ela não retorna uma string vazia como [0] e funciona bem. Existe alguma diferença entre o meu divisor de expressão regular e o seu?
Behzad
@Behzad AFAIK você tem o comportamento engraçado com a entrada vazia apenas para padrões vazios, não de você ter algum delimitador.
Landei
@Landei Deixe-me saber se eu entendi. Você quer dizer que usar apenas o "" na função de divisão retorna 0 como o primeiro valor do array? sim?
Behzad
12
String data = "abc";
String[] arr = explode(data);

public String[] explode(String s) {
    String[] arr = new String[s.length];
    for(int i = 0; i < s.length; i++)
    {
        arr[i] = String.valueOf(s.charAt(i));
    }
    return arr;
}
atamanroman
fonte
11

No java 8, existe um método com o qual você pode fazer isso: toCharArray ():

String k = "abcdef";
char[] x = k.toCharArray();

Isso resulta na seguinte matriz:

[a,b,c,d,e,f]
Fonji
fonte
Embora não seja uma matriz de string, isso é perfeito para casos em que você precisa de caracteres em vez de acessos bobos String.charAt(0)nas strings de caractere único desnecessariamente! ;)
varun
Você salva minha vida @fonji
Amit Sharma
5

Matriz de strings = matriz de caracteres?

Ou você tem uma string com várias palavras, cada uma das quais deve ser um elemento do array?

String[] array = yourString.split(wordSeparator);

o perdido
fonte
Eu quero uma matriz onde cada caractere da string será uma string. como char 'n' agora será a string "n" armazenada em uma matriz
riyana
4

Basta usar o .toCharArray()método em Java:

String k = "abc";
char[] alpha = k.toCharArray();

Isso deve funcionar bem no Java 8.

Radhesh Khanna
fonte
2

Você pode usar string.chars().mapToObj(e -> new String(new char[] {e}));, embora seja bastante extenso e funcione apenas com o java 8. Aqui estão mais alguns métodos:

string.split(""); (Has an extra whitespace character at the beginning of the array if used before Java 8) string.split("|"); string.split("(?!^)"); Arrays.toString(string.toCharArray()).substring(1, string.length() * 3 + 1).split(", ");

O último é desnecessariamente longo, é apenas para diversão!

HyperNeutrino
fonte
2

Um método adicional:

Como já foi mencionado, você poderia converter o "nome" original da String em uma matriz de caracteres com bastante facilidade:

String originalString = "name";
char[] charArray = originalString.toCharArray();

Para continuar esta linha de pensamento, você pode converter a matriz char em uma matriz String:

String[] stringArray = new String[charArray.length];
for (int i = 0; i < charArray.length; i++){
    stringArray[i] = String.valueOf(charArray[i]);
}

Neste ponto, seu stringArray será preenchido com os valores originais de sua string original "nome". Por exemplo, agora ligando

System.out.println(stringArray[0]);

Retornará o valor "n" (como uma String) neste caso.

AGéoCoder
fonte
2

Dividir uma string vazia com String.split () retorna uma única matriz de elemento contendo uma string vazia . Na maioria dos casos, você provavelmente prefere obter um array vazio ou um nulo se tiver passado um nulo, que é exatamente o que você obtém com org.apache.commons.lang3.StringUtils.split (str) .

import org.apache.commons.lang3.StringUtils;

StringUtils.split(null)       => null
StringUtils.split("")         => []
StringUtils.split("abc def")  => ["abc", "def"]
StringUtils.split("abc  def") => ["abc", "def"]
StringUtils.split(" abc ")    => ["abc"]

Outra opção é google guava Splitter.split () e Splitter.splitToList () que retornam um iterador e uma lista correspondente. Ao contrário da versão do apache, o Splitter irá lançar um NPE em null:

import com.google.common.base.Splitter;

Splitter SPLITTER = Splitter.on(',').trimResults().omitEmptyStrings();

SPLITTER.split("a,b,   c , , ,, ")     =>  [a, b, c]
SPLITTER.split("")                     =>  []
SPLITTER.split("  ")                   =>  []
SPLITTER.split(null)                   =>  NullPointerException

Se você quiser uma lista em vez de um iterador, use Splitter.splitToList () .

ccpizza
fonte
1
/**
 * <pre>
 * MyUtils.splitString2SingleAlphaArray(null, "") = null
 * MyUtils.splitString2SingleAlphaArray("momdad", "") = [m,o,m,d,a,d]
 * </pre>
 * @param str  the String to parse, may be null
 * @return an array of parsed Strings, {@code null} if null String input
 */
public static String[] splitString2SingleAlphaArray(String s){
    if (s == null )
        return null;
    char[] c = s.toCharArray();
    String[] sArray = new String[c.length];
    for (int i = 0; i < c.length; i++) {
        sArray[i] = String.valueOf(c[i]);
    }
    return sArray;
}

O método String.splitirá gerar o primeiro vazio, você tem que removê-lo do array. É aborrecido.

Frank Hou
fonte
1

Com base no título desta pergunta, vim aqui querendo converter uma String em uma matriz de substrings dividida por algum delimitador. Acrescentarei essa resposta aqui para outras pessoas que possam ter a mesma pergunta.

Isso cria uma matriz de palavras, dividindo a string em cada espaço:

String str = "string to string array conversion in java";
String delimiter = " ";
String strArray[] = str.split(delimiter);

Isso cria a seguinte matriz:

// [string, to, string, array, conversion, in, java]

Fonte

Testado em Java 8

Suragch
fonte
1

aqui está convertendo string simples em array de string usando o método de divisão.

String [] stringArray="My Name is ABC".split(" ");

Resultado

stringArray[0]="My";
stringArray[1]="Name";
stringArray[2]="is";
stringArray[3]="ABC";
Rahul Chaube
fonte