七、在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[]来保存密码等敏感信息.