Jadi saya sedang mengerjakan kode yang membuat saya terjebak

Saya terjebak pada tugas! Tolong bantu! tugas yang ditanyakan

Kami ingin memberikan pilihan kepada pengguna kami untuk memfilter kata-kata kotor. Misalkan kita menganggap kata cat, dog, dan llama sebagai kata yang tidak senonoh. Tulis sebuah program yang membaca sebuah string dari keyboard dan menguji apakah string tersebut berisi salah satu kata-kata kotor kita. Mintalah program Anda hanya menolak baris-baris yang mengandung kata-kata kotor. Misalnya, rangkaian Dogmatis adalah kategori kecil. Kalimat ini tidak boleh dianggap tidak senonoh. Saya tahu ==0 salah tetapi, saya ingin tidak ada kata bencana alam yang tidak senonoh dan mencetak kalimat seperti "badai itu bencana alam" dan tidak kotor

import java.util.*;

public class Profanity {

public static void main(String[] args) {

Scanner in = new Scanner(System.in);

String words;

System.out.println("Enter a sentence");
words = in.nextLine();
words = words.toLowerCase();

if (words.indexOf("cat") !=-1)
{
    if(words.length()==3)
        System.out.println("cats by itself censored!");

else if(words.indexOf("cat ")==0)
    System.out.println("cat is in the beginning censored!");
else if(words.indexOf(" cat ")!=-1)
    System.out.println("cat is in the string censored!");
else if(words.indexOf(" cat")==0); //<-- ==0 is def wrong, please help
    System.out.println("cat is at the end censored!"); }
else
    System.out.println(words);
}}

person user2821574    schedule 27.09.2013    source sumber
comment
Kemungkinan duplikat dari kesalahan filter kata-kata kotor   -  person Yilmaz    schedule 30.06.2019


Jawaban (2)


Solusi Anda salah. Ini tidak menangani tanda baca, dan " cat" belum tentu cocok dengan akhir kalimat. misalnya please catch the cat -- catch akan dicocokkan dan diabaikan, namun cat akan lolos.

Yang Anda perlukan hanyalah sebuah perulangan, mencari semua kemunculan "cat". Gunakan versi indexOf yang mencari dari indeks tertentu:

public int indexOf(String str, int fromIndex)

Idenya di sini adalah setiap kali Anda menemukan kecocokan, Anda memeriksa karakter sebelum dan setelahnya untuk melihat apakah itu huruf (gunakan Character.isLetter). Saat itulah Anda melakukan pengecekan batasan. Anda kemudian mulai mencari word di indeks lastIndex + word.length(), dan melanjutkan perulangan hingga Anda memeriksa seluruh string.

Anda dapat membungkusnya di dalam lingkaran lain sehingga Anda tidak perlu mengkodekan semua kata-kata kotor Anda dengan keras. Masukkan saja semuanya ke dalam array, dan ulangi array tersebut.

person paddy    schedule 27.09.2013

else if(word.indexOf(" cat")==(word.length()-5);

Seharusnya berhasil.

person nhgrif    schedule 27.09.2013
comment
Anda mencoba persis apa yang saya ketik dan tersandung pada bencana alam? Jika " cat" adalah Substring dari word, dan merupakan 4 karakter terakhir dari string word, maka indeks harus mengembalikan 4 lebih sedikit dari indeks terakhir, dan indeks terakhir kurang satu dari nilai bilangan bulat yang dikembalikan oleh pemanggilan metode .length() . - person nhgrif; 27.09.2013
comment
Dalam kasus khusus "the storm was a cataclysm", pemanggilan metode word.indexOf(" cat") harus mengembalikan 15 karena " cat" muncul mulai dari indeks 15. Sementara itu, word.length() harus mengembalikan 26, karena itu adalah panjang keseluruhan string. (Dan word.length()-5 akan memberi Anda 20, yang mana != word.indexOf(" cat") - person nhgrif; 27.09.2013
comment
Ubah program Anda dan cetak nilai yang dikembalikan oleh semua panggilan word.indexOf Anda. - person nhgrif; 27.09.2013