从一个大字符串中逐个读取字符

7

我有一个最多包含100000个字符的大字符串。为了从字符串中读取字符,我不使用string.charAt[index],而是使用string.toCharArray()方法将该字符串转换为字符数组,并且现在我正在使用charArray[index]。这比使用string.charAt[index]方法要快得多。但是我想知道是否有其他比string.toCharArray()方法更快的方法?


1
为了方便起见,也许我可以建议使用StringReader - Jakub Zaverka
1
@Ravi Joshi: "使用string.charAt [index]从字符串中读取字符"... String的charAt不会从字符串中读取字符。它会读取Java的char,但这无法容纳所有Unicode字符。自Java 1.4以来,一个字符可能需要多个Java char才能用char表示。例如,像Stackoverflow这样的网站完全支持Unicode和所有Unicode代码点。但Java的char原始数据类型却不支持。 - TacticalCoder
@TacticalCoder:你所说的是错误的。char原语是Unicode字符。也许你混淆了byte原语?来自官方文档:“char数据类型是单个16位Unicode字符。”来源:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html 例如:char rr = '華'; - Pierre Henry
@Pierre Henry:不,我没有混淆任何东西;)许多Unicode代码点需要两个Java字符进行编码。如果在这样的Unicode代码点上使用.charAt(...)方法,则只会读取该代码点的一部分。这就是为什么在当今时代,像charAtlength这样的方法大多已经失效了。您应该使用codePointAt。例如:您如何将字符'U+1040B'放入Java char中?您根本无法做到这一点。请参见100K+ SO用户的答案:https://dev59.com/d2ct5IYBdhLWcg3wLqnx(“... Java char保存UTF-16代码单元而不是Unicode字符...”) - TacticalCoder
是的,你说得对,对此我感到抱歉。我曾被误导认为Unicode最多只使用16位。感谢你指出这一点。我并不期待不得不处理那些“星际”平面 ;) - Pierre Henry
显示剩余4条评论
1个回答

1

我不认为有更快的方法。但请纠正我!

一个String实例由一个char数组支持。charAt()执行一些索引检查,这可能是它比使用toCharArray()返回的数组慢的原因。toCharArray()只是对支持数组执行System.arraycopy()。


当使用string.charAt[index]时,每次都会创建一个char[string.length()]吗?如果是的话,那么这可能是其性能较差的原因。 - ravi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接