Java String常见十大问题(3)

七、在switch语句中使用字符串

Java7开始,可以在switch语句中使用字符串,如下:

switch (str) { case "a": break; case "b": break; }

八、让字符串重复出现

使用Apache Commons Lang的StringUtils,可以实现这一功能:

String str = "1234 "; String repeated = StringUtils.repeat(str,3); //1234 1234 1234

其实现方式如下,注意,由于篇幅原因,并没有考虑任何异常,详细操作可以参考源码:

public String repeat(String str,int repeatTimes){ int inputLen = str.length(); //获取字符串的长度 int outputLen = inputLen * repeatTimes; //输出字符串的长度 switch (inputLen) { //当长度只有1或2时,选择直接使用字符操作,增加效率 case 1: return repeat(str.charAt(0), repeatTimes); case 2: char ch0 = str.charAt(0); char ch1 = str.charAt(1); char[] output = new char[outputLen]; for(int i = repeatTimes * 2 -1;i >=0;){ output[i] = ch0; output[i+1] = ch1; i +=2; } return output.toString(); default: StringBuilder buf = new StringBuilder(); for(int i = 0;i <= repeatTimes - 1; i++){ buf.append(str); } return buf.toString(); } } public String repeat(char ch,int repeatTimes){ char[] buf = new char[repeatTimes]; for(int i = repeatTimes-1; i >= 0; i--){ //复制repeatTimes buf[i] = ch; } return buf.toString(); }



九、如何计算指定字符在字符串里出现的次数

同样是使用Apache Commons Lang的StringUtils,如下:

int n = StringUtils.countMatches("aaaabbbb", "a"); System.out.println(n);

源码研究不透,不太会其实现方式.如果你知道的,希望你可以分享一下,万分感谢.

十.在一些敏感信息上,为什么倾向用char[],而不是String?

当String一旦创建,便不可再修改,直到gc将它回收.可gc的回收时间无法预测.即使一个对象不存在引用,也需要在未来的某个时间才会让给出回收.所以String操作敏感信息,有渗漏的风险.可char[]就不一样了,我们可以通过程序直接控制其元素,一般敏感信息不再有用,直接将数组即可,因此更倾向使用char[]来保存密码等敏感信息.

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/4964561ccb00bff45e839d91f151dc99.html