我已经搜索了一些关于此事的时间,但在任何地方都找不到合适的答案。
假设我有一个字符串:
"The quick brown fox jumps over the lazy dog"
我需要在此字符串中找到唯一的单词,并且在相同的单词之间找到字节位置以及字节距离。
好的,我可以找到单词,但是它们的字节位置和跟踪距离的想法是什么?例如:5是字符串快速的位置并转换为字节?
我希望这听起来不太愚蠢(我对Java很新)。
答案 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[]
)位于某些编码中,并且可能因编码而异。