Konwersja ciągu znaków na tablicę „znaków” w Javie

108

Chcę przekonwertować a Stringna tablicę obiektów klasy Character, ale nie mogę wykonać konwersji. Wiem, że za pomocą toCharArray()metody mogę przekonwertować String na tablicę pierwotnego typu danych „char” , ale nie pomaga to w konwersji ciągu znaków na tablicę obiektów typu Character .

Jak bym to zrobił?

kgd
źródło
6
Co masz na myśli mówiąc „nie pasuje do tablicy znaków”?
Barsju
Czy możesz to przeformułować lub wyartykułować trochę więcej, a może podać przykład kodu?
blackcompe
Aby przekonwertować charna Character, użyj Character.valueOf(mychar). Jeśli jest to tablica, zapętlaj każdy element i przekonwertuj.
ee.
java potrzebuje funkcji mapy, wyrażeń lambda.
Eric Hartford

Odpowiedzi:

185

Użyj tego:

String str = "testString";
char[] charArray = str.toCharArray();
Character[] charObjectArray = ArrayUtils.toObject(charArray);
Kuldeep Jain
źródło
27
Chciałbym, żeby ArrayUtils było standardem w maszynach JVM!
Alvin
4
ArrayUtilsjest z commons-lang, a nie JDK, prawda?
Eric Wang
66

Jedna wkładka z :

String str = "testString";

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

Co to jest:

  • zdobądź jedną IntStreamz postaci (możesz również spojrzeć codePoints())
  • odwzoruj wartość każdego znaku na Character(musisz rzucić, aby faktycznie powiedzieć, że to naprawdę a char, a następnie Java automatycznie ustawi go w polu Character)
  • uzyskać wynikową tablicę, wywołując toArray()
Alexis C.
źródło
33

Może sam napiszesz małą metodę

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
źródło
Zbyt wiele obiektów znaków zostanie utworzonych, jeśli jest to ogromny ciąg.
realPK
2
Może sam napiszesz małą metodę? Ponieważ metoda już istnieje (toCharArray ()), a metoda, która już istnieje, ma znacznie więcej inżynierów poświęconych i zainteresowanych zagwarantowaniem wydajności i niezawodności tej funkcji, niż to, co można skopiować / wkleić z postu przepełnienia stosu.
HoldOffHunger
1
@HoldOffHunger Masz całkowitą rację. Jednak toCharArray () zwraca pierwotny typ tablicy zamiast obiektu Character, zgodnie z wymaganiami OP. Jasne, możesz ponownie zapętlić znak [], aby przekonwertować go na znak []. Ale tworzenie pętli przez reklamę typu ciąg znaków jest tak proste, że nie widzę powodu, aby po prostu rzucić własne, jeśli nie chcesz wprowadzać biblioteki innej firmy.
Alvin
6

Mam nadzieję, że poniższy kod ci pomoże.

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

Działa, a wynik to:

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
źródło
4
Wcale nie o to prosił PO.
Qix - MONICA ZOSTAŁA POMYŚLNA
3

String#toCharArrayzwraca tablicę char, co masz jest tablicą Character. W większości przypadków nie ma znaczenia, czy używasz, charczy Characterteż jest to autoboxing . Problem w twoim przypadku polega na tym, że tablice nie są autoboxowane, sugeruję użycie tablicy char ( char[]).

Sandro
źródło
2

W takim przypadku musisz napisać własną metodę. Użyj pętli i pobierz każdy znak za pomocą charAt(i)i ustaw go na swoją Character[]tablicę za pomocą arrayname[i] = string.charAt[i].

Chandra Sekhar
źródło
2

Ta metoda przyjmuje String jako argument i zwraca tablicę znaków

/**
 * @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
źródło
1

inny sposób, aby to zrobić.

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
źródło
1

Konwersja ciągu znaków na tablicę znaków, a następnie konwersja tablicy znaków z powrotem na ciąg

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

// JEDEN SPOSÓB: Konwersja tablicy znaków z powrotem na łańcuch

  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

// DRUGI SPOSÓB: Konwersja tablicy znaków z powrotem na łańcuch

String.valueOf(characterArray);

// TRZECI SPOSÓB: Konwersja tablicy znaków z powrotem na łańcuch

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

Konwertowanie ciągu znaków na tablicę znaków

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

Konwersja tablicy znaków na tablicę znaków

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


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

korzyści z konwersji tablicy char Array na tablicę znaków możesz użyć funkcji Arrays.stream, aby uzyskać tablicę podrzędną

String subStringFromCharacterArray = 

              Arrays.stream(charObjectArray,2,6).
                          map(String::valueOf).
                          collect(Collectors.joining());
Arpan Saini
źródło
0

jeśli pracujesz z JTextField, może to być pomocne.

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
źródło
0

łańcuchy są zawsze najlepsze: D

String str = "somethingPutHere";
Character[] c = ArrayUtils.toObject(str.toCharArray());
ak_2050
źródło
1
chaining is always bestFałszywe.
Qix - MONICA ZOSTAŁA POMYŚLNA
1
ArrayUtils nie jest częścią JDK.
mbmast
0

Jeśli nie chcesz polegać na interfejsach API innych firm, oto działający kod JDK7 lub niższy. Nie tworzę tymczasowych obiektów postaci, jak to robią inne rozwiązania powyżej. wszystkie pętle są bardziej czytelne, zobacz sam :)

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
źródło
0

Użyłem StringReader klasę w java.io . Jedna z jego funkcji read(char[] cbuf)wczytuje zawartość łańcucha do tablicy.

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

Uruchomienie tego daje wynik:

array[0] = h
array[1] = e
array[2] = l
array[3] = l
array[4] = o
John K.
źródło