Мне нужно было выбрать определенные части очень большой строки (которая декодируется из QR-кода), чтобы установить ее как текст в элементах TextView в 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);
То, как я это сделал, может работать только в том случае, если формат декодированной строки QR остается прежним, т. Е. Если декодированная сейчас строка такова:
String string = "uid="001" name="Акбар Шах" gender="M" yob="1989" gname="Джахангир Шах" co="S/O: Джахангир Шах" house="45/5" street= "Улица Хузурей Ала" vtc="Alibah" po="Bagnan" dist="Faridabad" subdist="Alamgarh" state="Andhra" pc="6754674" dob="15/04/89"";
Тогда мой способ извлечения не сработает, если строка выглядит примерно так:
String string = "uid="002" name="Amar Tripathi" gender="M" yob="1990" vtc="Alibah" po="Bagnan" dist="Faridabad" state="Andhra" pc="6754674" доб="15/04/89"";
Или вот так:
String string = "uid="003" name="Энтони Гонзалис" gender="M" yob="1985" gname="Джахангир Шах" house="45/5" street="Улица Хузурей Ала" lm="За Мясной магазин" loc="Galianwalabagh" vtc="Alibah" dist="Faridabad" state="Andhra" pc="6754674" dob="15/04/89"";
Как вы, возможно, уже заметили, substring() не может использоваться универсально для всех случаев, потому что в последних двух строковых значениях отсутствуют некоторые части. Поэтому, если я укажу извлекать конкретную подстроку, которая зажата между gname и co, за исключением первого случая, в последних двух случаях он не сможет найти co и, следовательно, выполнение строки кода вернет ошибку. Есть ли лучший способ сделать это?
P.S. Могу ли я просто извлечь все части строки изнутри " "?
Например. «001» — это часть строки, из которой я просто хочу получить часть 001, которая находится внутри двойных кавычек.