Java 字节数组-定位字符位置
我有一个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.
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,但没有看到它。我猜我是瞎子:-你会发现问题可能确实是一个编码问题-这意味着你确实需要以某种方式使用字符串。