Pertanyaan "Menghapus" Gandakan spasi dari array java char


Saya mencoba untuk membuat metode yang akan mengambil array char, memotong ruang duplikat (2 atau lebih) dan kemudian tempatkan '\u0000' karakter di bagian akhir karena bagaimanapun banyak spasi dipotong sehingga panjang array terpenuhi. Saya sadar saya harus menggeser elemen-elemen ke bawah tetapi disinilah saya mengalami masalah. Program saya berfungsi dengan baik dengan 2 spasi tetapi urutan tiga berturut-turut akan membuangnya. Saya mengerti mengapa ini terjadi tetapi saya tidak tahu cara memperbaikinya. Saya tahu itu berasal dari kode characters[j] = characters[j+1] tapi saya tidak tahu bagaimana cara memperbaikinya.

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';
    }
}

Terima kasih semua.


4
2018-02-23 04:05


asal


Jawaban:


Dari apa yang saya pahami, Anda ingin semua spasi dihapus dari antara karakter non-ruang dan tambahkan \ u0000 sampai akhir.

Jika itu masalahnya, cobalah ini: Saya telah menggunakan loops dan if pernyataan untuk mencapainya.

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
2018-02-23 04:26



Solusi yang sangat sederhana jika Anda ingin menyimpan kode Anda saat ini. Cukup tambahkan 1 baris 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
2018-02-23 04:27



    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;

0
2018-02-23 04:38