Dizeyi Java'da "Karakter" dizisine dönüştürme


109

StringA'yı Character sınıfının nesnelerinden oluşan bir diziye dönüştürmek istiyorum ancak dönüştürmeyi gerçekleştiremiyorum. Bir String'i toCharArray()yöntemle "char" ilkel veri türü dizisine dönüştürebileceğimi biliyorum, ancak bir String'i Character türündeki nesneler dizisine dönüştürmeye yardımcı olmuyor .

Bunu nasıl yapacağım?


6
"Karakter dizisine uymuyor" derken neyi kastediyorsunuz?
barsju

Bunu yeniden ifade edebilir misiniz veya biraz daha ifade edebilir misiniz ya da bir kod örneği verebilir misiniz?
blackcompe

Dönüştürmek chariçin Characterkullanın Character.valueOf(mychar). Bir diziyse, her öğeyi döngüleyin ve dönüştürün.
ee.

java'nın bir harita işlevine, lambda ifadelerine ihtiyacı var.
Eric Hartford

Yanıtlar:


186

Bunu kullan:

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

27
ArrayUtils'in JVM'lerde standart olmasını diliyorum!
Alvin

4
ArrayUtilsdan commons-lang, doğru JDK değil?
Eric Wang

66

İle bir astar :

String str = "testString";

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

Ne yaptığı:

  • Bir olsun IntStreamkarakter (siz de bakmak isteyebilirsiniz codePoints())
  • her 'karakter' değerini Characterşuna eşleyin (gerçekten a olduğunu söylemek için çevirmeniz gerekir charve ardından Java otomatik olarak kutucuklara alır Character)
  • ortaya çıkan diziyi çağırarak elde edin toArray()

34

Neden kendinize küçük bir yöntem yazmıyorsunuz

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

Çok fazla Karakter Nesnesi, büyük bir String ise somutlaştırılacaktır.
realPK

2
Neden kendinize küçük bir yöntem yazmıyorsunuz? Bir yöntem zaten mevcut olduğu için (toCharArray ()) ve zaten var olan yöntem, bir stackoverflow gönderisinden kopyalanabilen / yapıştırılandan çok daha fazla mühendise adanmış ve bu işlevin performansını ve güvenilirliğini garanti etmekle ilgileniyor.
HoldOffHunger

1
@HoldOffHunger Kesinlikle haklısın. Ancak toCharArray (), OP'nin gerektirdiği şekilde Character nesnesi yerine ilkel dizi türünü döndürür. Elbette, karakteri [] karakterine dönüştürmek için char [] üzerinde tekrar döngü yapabilirsiniz. Ancak, Karakter nesnesi oluşturmak için bir dizi reklamda döngü yapmak o kadar basit ki, üçüncü taraf kitaplığı getirmek istemiyorsanız, neden sadece kendinizinkini yuvarlamıyorsunuz anlamıyorum.
Alvin

6

Umarım aşağıdaki kod size yardımcı olur.

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

Çalışıyor ve çıktı:

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
Bu hiç de OP'nin istediği şey değil.
Qix - MONICA

3

String#toCharArraybir dizi döndürür char, sahip olduğunuz şey bir dizi Character. Çoğu durumda, kullanmanız charveya otomatik kutulamaCharacter olması önemli değildir . Sizin durumunuzdaki sorun, dizilerin otomatik kutuya alınmamasıdır, bir dizi char ( char[]) kullanmanızı öneririm .


2

Bu durumda kendi yönteminizi yazmalısınız. Bir döngü kullanın ve kullanarak her karakteri alın charAt(i)ve Character[]kullanarak dizinize ayarlayın arrayname[i] = string.charAt[i].


2

Bu yöntem String'i argüman olarak alır ve Character Array'i döndürür

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

bunu yapmanın başka bir yolu.

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

Dizeyi Karakter Dizisine Dönüştürme ve ardından Karakter dizisini tekrar Dizeye Dönüştürme

   //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: Karakter dizisini String'e geri dönüştürme

  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: Character dizisini String'e geri dönüştürme

String.valueOf(characterArray);

// Üçüncü YOL: Karakter dizisini String'e geri dönüştürme

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

Dizeyi Karakter Dizisine Dönüştürme

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

Char dizisini Character Array'e dönüştürme

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


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

char Array'i Character Array'e dönüştürmenin faydaları, alt diziyi elde etmek için Arrays.stream işlevini kullanabilirsiniz.

String subStringFromCharacterArray = 

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

0

JTextField ile çalışıyorsanız, yardımcı olabilir ..

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

Üçüncü taraf API'lerine güvenmek istemiyorsanız, işte JDK7 veya altı için çalışan bir kod. Yukarıdaki diğer çözümlerde olduğu gibi geçici Karakter Nesnelerini örneklemiyorum. foreach döngüleri daha okunabilir, kendinizi görün :)

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

Kullandığım StringReader sınıfı java.io . İşlevlerinden biri read(char[] cbuf)bir dizenin içeriğini bir diziye okur.

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

Bunu çalıştırmak size şu çıktıyı verir:

array[0] = h
array[1] = e
array[2] = l
array[3] = l
array[4] = o
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.