我在java中有一个字节数组。该数组包含'%'符号在它的某个地方。我想在该数组中找到该符号的位置。有没有办法找到这个?
提前致谢!
[编辑] 我尝试了下面的代码,它工作正常。
byte[] b = {55,37,66};
String s = new String(b);
System.out.println(s.indexOf("%"));
我怀疑。每个字符在java中只占用一个字节吗?
答案 0 :(得分:2)
正确且更直接的番石榴解决方案:
Bytes.indexOf(byteArray, (byte) '%');
答案 1 :(得分:1)
使用Google Guava:
com.google.common.primitives.Bytes.asList(byteArray).indexOf(Byte.valueOf('%'))
答案 2 :(得分:0)
我来自未来,拥有一些流媒体和lambda的东西。 如果只是在byte []中找到一个字节的问题:
输入:
byte[] bytes = {55,37,66};
byte findByte = '%';
带有流媒体和lambda内容:
OptionalInt firstMatch = IntStream.range(0, bytes.length).filter(i -> bytes[i] == findByte).findFirst();
int index = firstMatch.isPresent ? firstMatch.getAsInt() : -1;
与以下内容几乎相同:
实际上,我想我还是更喜欢这个。 (例如,将其放在某个实用程序类中)。
int index = -1;
for (int i = 0 ; i < bytes.length ; i++)
if (bytes[i] == findByte)
{
index = i;
break;
}
您的问题实际上更多地是关于查找字符而不是查找字节。
您的解决方案可以改进的地方:
String s = new String(bytes); // will not always give the same result
// there is an invisible 2nd argument : i.e. charset
String s = new String(bytes, charset); // default charset depends on your system.
因此,您的程序在不同平台上的行为可能有所不同。 一些字符集每个字符使用1个字节,另一些字符集使用2、3,...或不规则。 因此,字符串的大小可能因平台而异。
第二,某些字节序列根本不能表示为字符串。即字符集没有匹配值的字符。
因此,您如何改进它:
如果您只知道字节数组将始终包含普通的旧ascii值,则可以使用以下方法:
byte[] b = {55,37,66};
String s = new String(b, StandardCharsets.US_ASCII);
System.out.println(s.indexOf("%"));
另一方面,如果您知道您的内容包含UTF-8字符,请使用:
byte[] b = {55,37,66};
String s = new String(b, StandardCharsets.UTF-8);
System.out.println(s.indexOf("%"));
等...