Java 字节数组-定位字符位置

Java 字节数组-定位字符位置,java,byte,Java,Byte,我有一个java的字节数组。该数组中某处包含“%”符号。我想找到该符号在该数组中的位置。有没有办法找到这个 提前谢谢 [编辑] 我尝试了下面的代码,效果很好 byte[] b = {55,37,66}; String s = new String(b); System.out.println(s.indexOf("%")); 我有一个疑问。在java中,每个字符都只占用一个字节吗?使用Google Guava: com.google.common.primitives.

我有一个java的字节数组。该数组中某处包含“%”符号。我想找到该符号在该数组中的位置。有没有办法找到这个

提前谢谢

[编辑] 我尝试了下面的代码,效果很好

    byte[] b = {55,37,66};
    String s = new String(b);
    System.out.println(s.indexOf("%"));
我有一个疑问。在java中,每个字符都只占用一个字节吗?

使用Google Guava:

com.google.common.primitives.Bytes.asList(byteArray).indexOf(Byte.valueOf('%'))
使用谷歌番石榴:

com.google.common.primitives.Bytes.asList(byteArray).indexOf(Byte.valueOf('%'))

正确且更直接的番石榴解决方案:

Bytes.indexOf(byteArray, (byte) '%');

正确且更直接的番石榴解决方案:

Bytes.indexOf(byteArray, (byte) '%');

我来自未来,有一些流媒体和lambda的东西。 如果只是在字节[]中查找一个字节的问题:

输入:

byte[] bytes = {55,37,66}; 
byte findByte = '%';
使用流媒体和lambda内容:

这与:

事实上,我想我还是喜欢这个。e、 并把它放在一些实用类中

int index = -1;
for (int i = 0 ; i < bytes.length ; i++) 
  if (bytes[i] == findByte) 
  {
    index = i;
    break;
  }
因此,您的程序可能在不同的平台上运行。 有些字符集每个字符使用1字节,其他字符集使用2,3。。。或者是不规则的。 因此,您的字符串大小可能因平台而异

其次,有些字节序列根本不能表示为字符串。i、 e.如果字符集没有匹配值的字符

那么,您如何改进它:

如果您只知道字节数组将始终包含普通的旧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("%"));

等等…

我来自未来,有一些流媒体和lambda的东西。 如果只是在字节[]中查找一个字节的问题:

输入:

byte[] bytes = {55,37,66}; 
byte findByte = '%';
使用流媒体和lambda内容:

这与:

事实上,我想我还是喜欢这个。e、 并把它放在一些实用类中

int index = -1;
for (int i = 0 ; i < bytes.length ; i++) 
  if (bytes[i] == findByte) 
  {
    index = i;
    break;
  }
因此,您的程序可能在不同的平台上运行。 有些字符集每个字符使用1字节,其他字符集使用2,3。。。或者是不规则的。 因此,您的字符串大小可能因平台而异

其次,有些字节序列根本不能表示为字符串。i、 e.如果字符集没有匹配值的字符

那么,您如何改进它:

如果您只知道字节数组将始终包含普通的旧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("%"));

等等…

这是字节数组而不是/?有什么原因吗?我已经用我尝试过的内容更新了这个问题@原因是我在读Android中的原始资源文件,它只返回inputstream。字符的字节数取决于它的大小。字符编码是由类提供的。@eznme否。我想,这个问题只有一行答案。这是字节数组而不是/?有什么原因吗?我已经用我尝试过的内容更新了这个问题@原因是我在读Android中的原始资源文件,它只返回inputstream。字符的字节数取决于它的大小。字符编码是由类提供的。@eznme否。我想,只有一行代码可以回答这个问题。我想这实际上不会起作用。'%将被包装在一个Character对象中,该对象和Character.valueOf“%”。EqualSomeByteObject将返回false。我知道我有一个类型转换问题,我认为编辑应该解决它。我认为这实际上不起作用。“%”将被包装在一个Character对象中,该对象和Character.valueOf“%”。equalssomeByteObject将返回false。我知道我有一个类型转换问题,我认为编辑应该修复它。我查找了indexOf,但没有看到它。我猜我是瞎子:-你得到了答案,问题可能确实是一个编码问题-这意味着您确实需要以某种方式使用字符串。我查找indexOf,但没有看到它。我猜我是瞎子:-你会发现问题可能确实是一个编码问题-这意味着你确实需要以某种方式使用字符串。