我收到一个byte[]
,其中包含数据(这是String
,已转换为byte[]
)。我需要检查byte[]
是否包含String
。像(伪代码):
byte[] b = ...;
b.contains("something");
如果它包含"某些东西"然后我需要将byte[]
拆分为较小的byte[]
,然后将所有较小的byte[]
加入一个byte[]
我会这样做:
// fileData is my original byte[]
final String fileDataStr = new String(fileData, "UTF-8");
final ArrayList<byte[]> list1 = new ArrayList<byte[]>();
final ArrayList<byte[]> list2 = new ArrayList<byte[]>();
final ArrayList<byte[]> list3 = new ArrayList<byte[]>();
if(fileDataStr.contains("VERSION:"))
{
Pattern pattern = Pattern.compile("(BEGIN:VCARD.*?END:VCARD)", Pattern.DOTALL);
Matcher m = pattern.matcher(fileDataStr);
while (m.find())
{
Log.d(TAG, "Getting vcard per vcard");
final String subVcard = m.group(1);
Pattern p = Pattern.compile("(\\d+)");
Matcher m2 = p.matcher(subVcard);
// Search for the vcard version
if (m2.find())
{
if("2".equalsIgnoreCase(m2.group(1)))
{
list1.add(subVcard.getBytes());
}
else if("3".equalsIgnoreCase(m2.group(1)))
{
list2.add(subVcard.getBytes());
}
else if("4".equalsIgnoreCase(m2.group(1)))
{
list3.add(subVcard.getBytes());
}
}
else
{
Log.d(TAG, "No vcard version found!");
}
}
}
// Convert the ArrayList to an Array
final Object[] aux1 = list1.toArray();
final Object[] aux2 = list2.toArray();
final Object[] aux3 = list3.toArray();
// Convert each array to a single byte[]
final byte[] myByteArray = new byte[aux1.length + aux2.length + aux3.length];
System.arraycopy(aux1, 0, myByteArray, 0, aux1.length);
System.arraycopy(aux2, 0, myByteArray, myByteArray.length, aux2.length);
System.arraycopy(aux3, 0, myByteArray, myByteArray.length, aux3.length);
// The inputstream
final InputStream myInputStream = new ByteArrayInputStream(myByteArray);
我想要解决此问题的方法是将原始byte []转换为String。将String与我的&#34;比较&#34;并将字符串重新转换回byte [],但我觉得这不是最有效的方法,或者我错了?
我在Android上与大String
合作,我需要这样做才能获得不错的效果。
有任何建议吗?