Saya perlu memilih bagian tertentu dari string yang sangat besar (yang diterjemahkan dari kode QR) untuk ditetapkan sebagai teks dalam elemen TextView di Android.
//*these are the parts of the string whose corresponding values I need as a text for my TextViews.*
String uid, name, gname, gender, house, street, ps, po, dist, subdist, state, pin, address, dob;
//*this 'string' object holds the decoded qr string*
String string = "uid="001" name="Akbar Shah" gender="M" yob="1989" gname="Jahangir Shah" co="S/O: Jahangir Shah" house="45/5" street="Huzurey Ala Street" vtc="Alibagh" po="Bagnan" dist="Faridabad" subdist="Alamgarh" state="Andhra" pc="6754674" dob="15/04/89"";
//*this is where I am using substring() to get a specific part of the string value*
uid = string.substring(string.indexOf("uid=")+5, string.indexOf("name=")-2);
name = string.substring(string.indexOf("name=")+6, string.indexOf("gender=")-2);
gname = string.substring(string.indexOf("gname=")+7, string.indexOf("co=")-2);
gender = string.substring(string.indexOf("gender=")+8, string.indexOf("yob=")-2);
house = string.substring(string.indexOf("house=")+7, string.indexOf("street=")-2);
street = string.substring(string.indexOf("street=")+8, string.indexOf("vtc=")-2);
ps = string.substring(string.indexOf("vtc=")+5, string.indexOf("po=")-2);
po = string.substring(string.indexOf("po=")+4, string.indexOf("dist=")-2);
dist = string.substring(string.indexOf("dist=")+6, string.indexOf("subdist=")-2);
subdist = string.substring(string.indexOf("subdist=")+9, string.indexOf("state=")-2);
state = string.substring(string.indexOf("state=")+7, string.indexOf("pc=")-2);
pin = string.substring(string.indexOf("pc=")+4, string.indexOf("dob=")-2);
dob = string.substring(string.indexOf("dob=")+5, string.indexOf("/>")-1);
//*this is where I have concatenated the whole address parts into one*
address = house+", "+street+", \nPS - "+ps+", \nPO - "+po+", \nDistrict - "+dist+", \nSub-Division - "+subdist+", \nState - "+state+", \nPin Code - "+pin;
TextView tv_uid, tv_name, tv_gName, tv_gender, tv_address, tv_dob;
//*this is where I then setText those substrings for appropriate TextViews*
tv_uid.setText(uid);
tv_name.setText(name);
tv_gName.setText(gname);
tv_gender.setText(gender);
tv_address.setText(address);
tv_dob.setText(dob);
Cara saya melakukan ini hanya dapat berfungsi jika format string QR yang didekodekan tetap sama, yaitu jika string yang didekode sekarang adalah ini:
String string = "uid="001" name="Akbar Shah" gender="M" yob="1989" gname="Jahangir Shah" co="S/O: Jahangir Shah" house="45/5" street= "Jalan Huzurey Ala" vtc="Alibagh" po="Bagnan" dist="Faridabad" subdist="Alamgarh" state="Andhra" pc="6754674" dob="15/04/89"";
Lalu, cara saya mengekstrak tidak akan berhasil jika stringnya terlihat seperti ini:
String string = "uid = "002" name = "Amar Tripathi" gender = "M" yob = "1990" vtc = "Alibagh" po = "Bagnan" dist = "Faridabad" state = "Andhra" pc = "6754674" dob="15/04/89"";
Atau, seperti ini:
String string = "uid = "003" name = "Anthony Gonzalis" gender = "M" yob = "1985" gname = "Jahangir Shah" house = "45/5" street = "Jalan Huzurey Ala" lm = "Di Balik Toko daging" loc="Galianwalabagh" vtc="Alibagh" dist="Faridabad" state="Andhra" pc="6754674" dob="15/04/89"";
Seperti yang mungkin sudah Anda ketahui, substring() tidak dapat digunakan secara universal untuk semua kasus karena dua nilai string terakhir memiliki beberapa bagian yang hilang. Jadi jika saya menentukan untuk mengekstrak substring tertentu yang diapit di antara gname dan co, kecuali untuk kasus pertama, dalam dua kasus terakhir ia tidak akan dapat menemukan co dan karenanya eksekusi kesalahan pengembalian baris kode. Apakah ada cara yang lebih baik untuk melakukannya?
P.S. Bisakah saya mengekstrak semua bagian string dari dalam " "?
Misalnya. "001" adalah bagian dari string yang saya ingin dapatkan bagian 001 yang ada di dalam tanda kutip ganda.