Saya memiliki string sebagai berikut di Jawa. Panjang string tidak diketahui dan sebagai contoh akan seperti di bawah ini.

String str = "I love programming. I'm currently working with Java and C++."

Untuk beberapa persyaratan saya ingin mendapatkan 15 karakter pertama. Kemudian 30, 45, 70 karakter berikutnya. Setelah string dipisah jika namanya tidak berarti maka harus dipisah dari spasi terdekat. Untuk contoh di atas outputnya adalah sebagai berikut.

String strSpli1 = "I love "; //Since 'programming' is splitting it was sent to next split
String strSpli2 = "programming. I'm currently ";//Since 'working'  is splitting it was sent to next split
String strSpli3 = "working with Java and C++.";

Tolong bantu saya untuk mencapai ini.

Jawaban yang diperbarui untuk siapa saja yang memiliki persyaratan seperti ini.

 String str = "I love programming. I'm currently working with Java and C++.";
                String strSpli1 = "";
                String strSpli2 = "";
                String strSpli3 = "";

    try {
                strSpli1 = str.substring(15);
                int pos = str.lastIndexOf(" ", 16);
                if (pos == -1) {
                    pos = 15;
                }
                strSpli1 = str.substring(0, pos);
                str = str.substring(pos);
    
                try {
                    strSpli2 = str.substring(45);
                    int pos1 = str.lastIndexOf(" ", 46);
                    if (pos1 == -1) {
                        pos1 = 45;
                    }
                    strSpli2 = str.substring(0, pos1);
                    str = str.substring(pos1);
    
                    try {
                        strSpli3 = str.substring(70);
                        int pos2 = str.lastIndexOf(" ", 71);
                        if (pos2 == -1) {
                            pos2 = 45;
                        }
                        strSpli3 = str.substring(0, pos2);
                        str = str.substring(pos2);
    
                    } catch (Exception ex) {
                        strSpli3 = str;
                    }
    
                } catch (Exception ex) {
                    strSpli2 = str;
                }
            } catch (Exception ex) {
                strSpli1 = str;
            }

Terima kasih

0
AbRe 12 Mei 2021, 09:38

2 jawaban

Jawaban Terbaik

Gunakan versi 2 parameter lastIndexOf() untuk mencari ruang mundur mulai dari posisi tertentu. Contoh untuk 15 karakter pertama:

int pos = str.lastIndexOf(" ", 16);
if (pos == -1) {
    pos = 15;
}
String found = str.substring(0, pos);
str = str.substring(pos+1);

Ini tidak ada pemeriksaan seperti memastikan string dimulai dengan setidaknya 15 karakter, atau pos+1 valid untuk panjang tertentu


Sarankan untuk melihat java.text.BreakIterator

1
2 revs 12 Mei 2021, 11:52

Mengapa Anda menggunakan begitu banyak try catch? coba saja ini.

public class MyClass {
public static void main(String args[]) {
    String str = "I love programming. I'm currently working with Java and C++.";
    String strSpli1 = "";
    String strSpli2 = "";
    String strSpli3 = "";
    strSpli1 = str.substring(0, 7);
    strSpli2 = str.substring(7, 33);
    strSpli3 = str.substring(34, str.length());
   

     System.out.println(strSpli1+"\n");
     System.out.println(strSpli2+"\n");
     System.out.println(strSpli3+"\n");

}

Gunakan substring (indeks awal, indeks akhir).

0
robihidayat 12 Mei 2021, 07:12