2016-02-23 1 views
4

Я пытаюсь создать метод, который будет принимать массив символов, вырезать любые повторяющиеся пробелы (2 или более), а затем поместить '\u0000' символов в конце для любого количества пробелов были вырезаны так, чтобы длина массива была выполнена. Я понимаю, что мне нужно сдвинуть элементы вниз, но это то, где у меня проблемы. Моя программа отлично работает с 2-мя пробелами, но последовательность из трех подряд выкинет ее. Я понимаю, почему это происходит, но я не знаю, как это исправить. Я знаю, что это связано с кодом characters[j] = characters[j+1], но я не знаю, как это сделать.
«Удаление» Дублирующиеся пробелы из массива char java

int duplicateCount = 0; 
// Create a loop to read the element values 
for(int i = 0; i + 1 < characters.length; i++){ 
    // If the element is a space and the next one is a space 
    if(characters[i] == ' ' && characters[i+1] == ' '){ 
     // Add to duplicate count and start shifting values down 
     duplicateCount++; 
     // *THIS IS WHERE I THINK BUG IS* 
     for(int j = i; j < characters.length - 1; j++){ 
      characters[j] = characters[j+1]; 
      } 
     } 
    } 
    // Replace characters at end with how many duplicates were found 
    for(int replace = characters.length - duplicateCount; replace < characters.length; replace++){ 
     characters[replace] = '\u0000'; 
    } 
} 

Спасибо всем.

+0

см это http://stackoverflow.com/questions/3958955/how-to-remove-duplicate-white-spaces-in-string-using-java/3958979#3958979 –

+0

ли эту работу с символами? И, кроме того, массивы? Кажется, это применимо только к строкам – dj1121

+0

Вы хотите, чтобы все пробелы были перемещены в конец. правильно? –

ответ

1

Из того, что я понял, вы хотите удалить все пробелы между символами без пробелов и добавить \ u0000 в конец.

Если это проблема, попробуйте это: Я использовал loops и if заявления для его достижения.

for (int i = 0; i < characters.length; i++) { 
     int j =i+1; 
     if (characters[i] == ' ' || characters[i] == '\u0000') { 
      while (j<characters.length && (characters[j] == ' ' || characters[j] == '\u0000')) { 

       j++; //increment j till a non-space char is found 

      } 
      if(j<characters.length && (characters[j] != ' ' || characters[j] != '\u0000')) 
       // to ensure that the control entered while 
      { 
      characters[i] = characters[j]; //swapping the values 
      characters[j] = '\u0000'; //giving value \u0000 to position j 
     } 
     } 

    } 
+1

Я удалил свой ответ, потому что вы отвечаете более полезным и простым способом, поэтому +1 uv –

+0

@PiyushGupta Вам не следует удалять это. Должны были внести соответствующие исправления. Спасибо за поддержку! –

0

Очень простое решение, если вы хотите сохранить свой текущий код. Просто добавьте 1 строку i--.

int duplicateCount = 0; 
// Create a loop to read the element values 
for(int i = 0; i + 1 < characters.length; i++){ 
    // If the element is a space and the next one is a space 
    if(characters[i] == ' ' && characters[i+1] == ' '){ 
     // Add to duplicate count and start shifting values down 
     duplicateCount++; 
     // *THIS IS WHERE I THINK BUG IS* 
     for(int j = i; j < characters.length - 1; j++){ 
      characters[j] = characters[j+1]; 
      } 
     i--; // so that multiple space case can be handled 
     } 
    } 
    // Replace characters at end with how many duplicates were found 
    for(int replace = characters.length - duplicateCount; replace < characters.length; replace++){ 
     characters[replace] = '\u0000'; 
    } 
} 
0
int count = 0; // Count of non-space elements 

    // Traverse the array. If element encountered is 
    // non-space, then replace the element at index 'count' 
    // with this element 
    for (int i = 0; i < n; i++) 
     if (arr[i] != '') 
      arr[count++] = arr[i]; // here count is 
            // incremented 

    // Now all non-space elements have been shifted to 
    // Make all elements '\u0000' from count to end. 
    while (count < n) 
     arr[count++] = 0; 
Смежные вопросы