Java中的字节位置

时间:2014-04-29 09:27:20

标签: java byte

我已经搜索了一些关于此事的时间,但在任何地方都找不到合适的答案。

假设我有一个字符串:

"The quick brown fox jumps over the lazy dog"

我需要在此字符串中找到唯一的单词,并且在相同的单词之间找到字节位置以及字节距离

好的,我可以找到单词,但是它们的字节位置和跟踪距离的想法是什么?例如:5是字符串快速的位置并转换为字节?

我希望这听起来不太愚蠢(我对Java很新)。

2 个答案:

答案 0 :(得分:2)

找到独特的单词应该相当容易;在空格上拆分,将字符串添加到Set,并且方法末尾的Set中的任何内容都将是文件中的唯一字。这可以是任意复杂的,取决于定义一个唯一单词的内容,以及除了空格之外的字符是否分开单词。

字节位置/距离问题有点困难。如果内存服务,则Java中的String个对象是char[]个对象的包装,而chars是Java中的16位unicode字符(http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html)。

所以我猜测字节距离只是字符位置的线性函数?

如果您正在使用其他编码,但getBytes()方法可能有用。

http://docs.oracle.com/javase/tutorial/i18n/text/string.html

因此对于类似的东西,一个天真的解决方案是确定每个字符的字节数,这样可以非常容易地计算字节位置/距离,但确定可能效率不高。但是,如果正确完成,它应该产生正确的结果。

答案 1 :(得分:1)

位置从0开始计算,而不是1.所以"快速"将具有字符位置5,对于US-ASCII也是字节位置。也许角色位置就足够了。

String s = "The quick brown fox jumps over the lazy dog";
int charsIndex = s.indexOf("quick"); // 4
int charsLength = "The ".length(); // 4
int bytesLength = "The ".getBytes("UTF-8").length; // 4
char ch = s.charAt(4); // 'q'
int c = s.codePointAt(4); // (int) 'q'

在Java中,文本(String)始终使用Unicode,因此所有字符都是可能且可组合的。 字节(byte[])位于某些编码中,并且可能因编码而异。