我需要从Android中的TextView元素中选择一个非常大的字符串(即从QR码中解码)的特定部分设置为文本。如何从QR解码字符串中提取非常特定的字符串部分集合?
//*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字符串格式是一样的,即如果字符串现在解码只能工作方式是这样的:
串串=“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“”;
然后,我解压,如果该字符串看起来像这样将无法工作的方式:
串串= “UID =” 002" NAME = “阿马尔特里帕西” 性别= “M” yob =“1990”vtc =“Alibagh”po =“Bagnan”dist =“Faridabad”state =“Andhra”pc =“6754674”dob =“15/04/89”“;
或者,像这样:
串串= “UID =” 003" NAME = “安东尼Gonzalis” 性别= “M” yob = “1985” 的gname = “贾汗吉尔国王” 房子= “45/5”street =“Huzurey Ala Street”lm =“肉店后面”loc =“Galianwalabagh”vtc =“Alibagh”dist =“Faridabad”state =“Andhra”pc =“6754674”dob =“15/04/89 “”;
正如您可能已经注意到的那样,substring()不能在所有情况下普遍使用,因为最后两个字符串值中缺少一些部分。因此,如果我指定提取夹在gname和co之间的特定子字符串(除了第一种情况),在最后两种情况下,它将无法找到co,从而执行代码行返回错误。 有没有更好的方法来做到这一点?
P.S.我可以从内部提取所有的字符串部分吗?
E.g. “001”是字符串的一部分,我只想从中获取001双引号内的部分。
感谢Yato对此事的洞察力。但我想我已经找到了另一种解决方法,我使用XMLPullParser来提取我需要的特定子字符串。 –
是的,对于其他人(或你自己未来)来说,这可能比使用正则表达式更容易理解。您是否也介意在回答您自己的问题时将其写入并接受它,以便其他用户能够看到您的问题解决方案是什么? :) – Yato