将String数组复制到新的String数组中

时间:2012-03-25 08:38:37

标签: java

我在这里做错了什么?我想以某种方式消除我的String数组中的空元素。这是我到目前为止所尝试的:

    String version = null; 
    String[] xml = new String[str.length]; 
    for(int i = 0; i <= str.length -1; i++)
    {
        if(str[i] == "")
        {

        }
        else
        {
            xml[i] = str[i]; 
        }
    }






    String version = null; 
    String[] xml = new String[str.length]; 
    for(int i = 0; i <= str.length -1; i++)
    {
        if(!str[i].equals(""))
        {
            xml[i] = str[i]; 
        }
    }



    String version = null; 
    String[] xml = new String[str.length]; 
    for(int i = 0; i <= str.length -1; i++)
    {
        if(!str[i].isEmpty())
        {
            xml[i] = str[i]; 
        }
    }




     String version = null; 
    String[] xml = new String[str.length]; 
    for(int i = 0; i <= str.length -1; i++)
    {
        if(str[i].isEmpty() == false)
        {
            xml[i] = str[i]; 
        }
    }

无论我尝试哪一个,它总是会复制所有值:S我已经检查了本地,很明显String数组中有空数组

6 个答案:

答案 0 :(得分:10)

试试这个,

b = Arrays.copyOf(a, a.length);

或者

b = new int[a.length];
System.arraycopy(a, 0, b, 0, b.length);

或者

b = a.clone();

答案 1 :(得分:8)

您正在复制相同长度的数组并使用相同的索引。长度总是一样的。

List<String> nonBlank = new ArrayList<String>();
for(String s: str) {
    if (!s.trim().isEmpty()) {
        nonBlank.add(s);
    }
}
// nonBlank will have all the elements which contain some characters.
String[] strArr = (String[]) nonBlank.toArray( new String[nonBlank.size()] );

答案 2 :(得分:0)

String str[] = {"Hello","Hi","","","Happy","","Hmm"};
    int count = 0;// Thisreprents the number of empty strings in the array str
    String[] xml = new String[str.length]; 
    for(int i = 0,j=0; i <= str.length -1; i++)
    {
        if(str[i].equals(""))
        {
            count++;
        }
        else
        {
            xml[j] = str[i];j++; 
        }
    }
    String a[] = Arrays.copyOfRange(xml, 0, xml.length-count);//s is the target array made by copieng the non-null values of xml
    for(String s:a){
        System.out.println(s);
    }

注意:这可能不是一个有效的解决方案,但它会根据您的要求提供结果

答案 3 :(得分:0)

这只是一种替代解决方案,因为您不想要ListArray。 阅读代码中的注释,以清楚地理解逻辑。

int i,j=0,cnt=0;

//The below for loop is used to calculate the length of the xml array which
//shouldn't have any empty strings.

for(i=0;i<str.length;i++)
if(!isEmpty(str[i])
cnt++;

//Creation of the xml array with proper size(cnt) and initialising i=0 for further use
String xml[]=new String[cnt];
i=0;

//Simply copying into the xml array if str[i] is not empty.Notice xml[j] not xml[i]
while(i<str.length)
{
if(!isEmpty(str[i]))
{
xml[j]=str[i];
i++;
j++;
}
else
i++;
}

那应该做的工作。 另外我建议不要使用数组的第0个位置,因为它会为.length函数造成混淆。这只是我的观点。如果您对此感到满意,请继续! :d

答案 4 :(得分:0)

如果您正在寻找高性能解决方案,我认为这是最佳解决方案。否则,如果您的输入数组不是那么大,我会使用类似于Peter Lawrey的解决方案,因此它使您的代码易于理解。

使用此解决方案,您只需将输入数组循环一次,如果您不再需要输入数组,则可以避免使用preserveInput = false调用filterBlankLines的一个数组副本。

public class CopyingStringArrayIntoNewStringArray {


public static void main(String[] args) {

    String[] str =  { "", "1", "", null, "2", "   ", "3", "" };

    System.out.println("\nBefore:");
    printArrays(str);

    String[] xml = filterBlankLines(str, true);

    System.out.println("\nAfter:");
    printArrays(xml);

}

private static String[] filterBlankLines(String input[], boolean preserveInput ) {

    String[] str;
    if (preserveInput) {
        str = new String[input.length];
        System.arraycopy(input, 0, str, 0, input.length);
    } else {
        str = input;
    }

    // Filter values null, empty or with blank spaces
    int p=0, i=0;
    for (; i < str.length; i++, p++) {
        str[p] = str[i];
        if (str[i] == null || str[i].isEmpty() || (str[i].startsWith(" ") && str[i].trim().isEmpty())) p--;
    }

    // Resize the array
    String[] tmp = new String[ p ];
    System.arraycopy(str, 0, tmp, 0, p);
    str = null;

    return tmp;
}

private static void printArrays(String str[]) {

    System.out.println( "length " + str.length);
    for (String s : str ) {
        System.out.println(">"+s+"<");
    }

}

}

输出:

Before:
length 8
><
>1<
><
>null<
>2<
>   <
>3<
><

After:
length 3
>1<
>2<
>3<

答案 5 :(得分:0)

这是将数组复制到新数组的最佳和简短的方法。

System.arraycopy(srcArray, 0, destArray, 1, destArray.length -1);