itsource

Java에서 개체 배열을 문자열 배열로 변환하는 방법

mycopycode 2022. 8. 16. 23:38
반응형

Java에서 개체 배열을 문자열 배열로 변환하는 방법

오브젝트 어레이를 String 어레이로 변환하려면 다음 코드를 사용합니다.

Object Object_Array[]=new Object[100];
// ... get values in the Object_Array

String String_Array[]=new String[Object_Array.length];

for (int i=0;i<String_Array.length;i++) String_Array[i]=Object_Array[i].toString();

하지만 다른 방법이 있을까요?

String_Array=(String[])Object_Array;

그러나 이로 인해 런타임 오류가 발생합니다.Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;

어떻게 하면 좋을까요?

또 다른 대안으로System.arraycopy:

String[] stringArray = Arrays.copyOf(objectArray, objectArray.length, String[].class);

Java 8의 경우:

String[] strings = Arrays.stream(objects).toArray(String[]::new);

다른 유형의 배열을 변환하려면:

String[] strings = Arrays.stream(obj).map(Object::toString).
                   toArray(String[]::new);

System.arraycopy가 아마도 가장 효율적인 방법일 것입니다만, 미관을 위해서는, 다음과 같은 것을 추천합니다.

 Arrays.asList(Object_Array).toArray(new String[Object_Array.length]);

몇 가지 해결 방법이 제시되어 있지만 원인은 제시되어 있지 않기 때문에, 당신이 무엇을 잘못하고 있었는지 아는 것은 단지 주어진 답변에서 '뭔가'를 얻는 것만큼이나 중요하다고 생각하기 때문에, 이것을 자세히 설명하겠습니다.

먼저 Oracle의 의견을 들어보겠습니다.

 * <p>The returned array will be "safe" in that no references to it are
 * maintained by this list.  (In other words, this method must
 * allocate a new array even if this list is backed by an array).
 * The caller is thus free to modify the returned array.

중요해보이지 않을 수도 있지만 보시다시피...그러면 다음 행은 무엇이 고장났을까요?목록의 모든 개체가 String이지만 변환되지 않습니다. 이유는 무엇입니까?

List<String> tList = new ArrayList<String>();
tList.add("4");
tList.add("5");
String tArray[] = (String[]) tList.toArray();   

아마 많은 분들이 이 코드가 같은 기능을 하고 있다고 생각하시겠지만 그렇지 않습니다.

Object tSObjectArray[] = new String[2];
String tStringArray[] = (String[]) tSObjectArray;

실제로 쓰여진 코드가 이와 같은 일을 하고 있습니다.자바독이 말하고 있어!새로운 어레이가 인스톨 됩니다.오브젝트입니다!!!

Object tSObjectArray[] = new Object[2];
String tStringArray[] = (String[]) tSObjectArray;   

따라서 tList.toArray는 문자열이 아닌 객체를 인스턴스화하고 있습니다.

따라서 이 스레드에서 언급하지 않은 자연 솔루션은 다음과 같습니다.

String tArray[] = tList.toArray(new String[0]);

충분히 명확하기를 바랍니다.

Google 컬렉션 프레임워크는 객체를 문자열로 변환할 수 있도록 좋은 변환 방법을 제공합니다.유일한 단점은 'Itable'에서 'Itable'로 바뀌어야 한다는 것입니다만, 저는 이렇게 하고 싶습니다.

Iterable<Object> objects = ....... //Your chosen iterable here
Iterable<String> strings = com.google.common.collect.Iterables.transform(objects, new Function<Object, String>(){
        String apply(Object from){
             return from.toString();
        }
 });

이렇게 하면 어레이를 사용하지 않아도 되지만 제가 선호하는 방법이 될 것 같습니다.

이 제품은 좋지만 각 괄호로 둘러싸여 있기 때문에 Myers가 알아차린 대로 동작하지 않습니다.

Arrays.toString(objectArray).split(",")

이것은 못생겼지만 효과가 있습니다.

Arrays.toString(objectArray).replaceFirst("^\\[", "").replaceFirst("\\]$", "").split(",")

이 코드를 사용하는 경우 객체의 toString()에 의해 반환되는 문자열에 쉼표가 포함되어 있지 않은지 확인해야 합니다.

배열에 포함된 개체의 문자열 표현을 가져오려면 다른 방법이 없습니다.

오브젝트 배열에 문자열만 포함되어 있는 경우 다음 작업을 수행할 수도 있습니다(calling toString()).

for (int i=0;i<String_Array.length;i++) String_Array[i]= (String) Object_Array[i];

Object_Array의 String[]에 캐스트를 사용할 수 있는 유일한 경우는 참조하는 배열이 실제로 String[]로 정의되어 있는 경우입니다.다음은 예를 제시하겠습니다.

    Object[] o = new String[10];
    String[] s = (String[]) o;

여러분의 아이디어로는, 실제로 성공으로 다가가고 있지만, 이렇게 하면 됩니다.

for (int i=0;i<String_Array.length;i++) String_Array[i]=(String)Object_Array[i];

참고로 Arrays 유틸리티 방식을 사용하면 코드를 우아하게 만들 수 있습니다.

타입 컨버터를 사용할 수 있습니다.모든 유형의 배열을 문자열 배열로 변환하려면 자체 변환기를 등록하면 됩니다.

 TypeConverter.registerConverter(Object[].class, String[].class, new Converter<Object[], String[]>() {

        @Override
        public String[] convert(Object[] source) {
            String[] strings = new String[source.length];
            for(int i = 0; i < source.length ; i++) {
                strings[i] = source[i].toString();
            }
            return strings;
        }
    });

그것을 사용하다

   Object[] objects = new Object[] {1, 23.43, true, "text", 'c'};
   String[] strings = TypeConverter.convert(objects, String[].class);
Object arr3[]=list1.toArray();
   String common[]=new String[arr3.length];

   for (int i=0;i<arr3.length;i++) 
   {
   common[i]=(String)arr3[i];
  }

헤드쉐 없이 쉽게 변경 객체 어레이를 문자열 어레이로 변환 객체 drivex[] = {1,2};

    for(int i=0; i<drive.length ; i++)
        {
            Str[i]= drivex[i].toString();
            System.out.println(Str[i]); 
        }

언급URL : https://stackoverflow.com/questions/1018750/how-to-convert-object-array-to-string-array-in-java

반응형