我在这里做错了什么?我想以某种方式消除我的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数组中有空数组
答案 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);