2016-03-04 11 views
-1
public static void removeDuplicateSpaces(char[] characters) { 

    int dupCount = 0; 
    for (int i = 0; i < characters.length; i++) { 
     if (characters[i] == ' ' && characters[i + 1] == ' ') { 
      dupCount++; 
      for (int j = i; j < characters.length - 1; j++) { 
       characters[j] = characters[j + 1]; 

      } 
      if ((characters[i] == ' ' && characters[i + 1] == ' ')) { 
       dupCount++; 
       for (int j = i; j < characters.length - 1; j++) { 
        characters[j] = characters[j + 1]; 
       } 
       dupCount++; 
      } 
      for (int add = characters.length - 1; add > 
        characters.length- dupCount; add--) { 
       characters[add] = '\u0000'; 

      } 

     } 

    } 

} 

Мне нужно, чтобы уменьшить все последовательности из 2 или более пробелов 1 места в массиве символов. Если удалены какие-либо пробелы, то то же число нулевого символа '\ u0000' заполнит элементы в конце массива . Мой код не удаляет 4 пробела, если между ними есть 5 пробелов. Например, {'e', '', '', '', '', '', '4'}Как удалить 2 или более пробелов, которые находятся рядом друг с другом из массив символов

ответ

2

Как насчет преобразования его в String, выполняя некоторое регулярное выражение и обратно в массив символов?

new String(characters).replaceAll("[ ]+", " ").toCharArray() 

EDIT: Хорошо, я вижу, что вы на самом деле не возвращаете массив, но изменяете исходный массив. Тогда вы могли бы использовать простой цикл

String s = new String(characters).replaceAll("[ ]+", " "); 
for (int i = 0; i < characters.length; i++) { 
    characters[i] = (i < s.length() ? s.charAt(i) : '\u0000'); 
} 
1

другой вариант, чтобы показать вам, как он должен работать с простыми петлями:

public static void removeDuplicateSpaces(final char[] characters) { 
    for (int i = 0; i < characters.length; i++) { 
     while (characters[i] == ' ') { // while current symbol is space 
      for (int j = (i + 1); j < characters.length; j++) 
       characters[j - 1] = characters[j]; // shift the rest of array 
      characters[characters.length - 1] = 0; 
     } 
    } 
}