最常问到的关于JAVA String的10个问题
来源:互联网 发布:linux命令cp 编辑:程序博客网 时间:2024/06/07 02:31
以下是关于Java String的出现频率最高的10个问题:
1. 怎么比较String,用“==”还是equals()
简单来说,“==”是用来比较内存引用是否相等而equals是比较值是不是相等,除非你想看看两个string是不是同一个对象,否则你都应该用equals()。
2. 对于敏感信息来说(比如密码),为什么使用char[]比用String好?
String是不可变长度的,它在被创建之后会一直保持不变,直到被当垃圾回收。但是使用char数组却不一样,你可以随时修改它。所以如果使用char数组的话,敏感信息(如密码)就不太可能出现在系统的其它地方(而String在被回收前,你不知道它在哪)。
3. 可以在switch语句中使用String吗?
在JDK6及之前的版本是不可以的,从JDK7开始可以了:
// java 7 only!switch (str.toLowerCase()) { case "a": value = 1; break; case "b": value = 2; break;}
4. 怎么把String转换成int?
int n = Integer.parseInt("10");
很简单且经常用到,但是却有可能有时候会忘掉。
5. 怎么根据空白字符分割String?
可以用正则表达式:“\s”可以表示的空白字符有:“ ”, “\t”,“\r”,“\n” 即空格、TAB、换行、回车。
String[] strArray = aString.split("\\s+");
6. substring究竟做了什么?
在JDK6中,substring()方法返回的是原来的字符串,并没有创建一个新的。如果要创建一个全新的String的话可以这样:
str.substring(m, n) + ""
用上面这种方式通常会使程序更快,因为原来的字符串得以被回收。
在JDK7中,substring()创建了一个全新的字符串,不使用原来的。详细可以查阅:
substring()方法在JDK6和JDK7中的区别
7. String 和StringBuilder 及StringBuffer的区别
String和StringBuilder: StringBuilder是可变长度的,创建以后可以随时修改它。
StringBuilder和StringBuffer: StringBuffer是线程安全的,所以会比StringBuilder更慢,建议多个线程操作时使用。
8. 怎么重复String
可以使用Apache公共语言包(Apache Commons Lang package)中的repeat方法:
String str = "abcd";String repeated = StringUtils.repeat(str,3);//abcdabcdabcd
9. 怎么把字符串变成日期?
String str = "Sep 17, 2013";Date date = new SimpleDateFormat("MMMM d, yy", Locale.ENGLISH).parse(str);System.out.println(date);//Tue Sep 17 00:00:00 EDT 2013
10. 怎么计算一个字符在字符串中的出现次数?
使用Apache公共语言包(Apache Commons Lang package)中的StringUtils:
int n = StringUtils.countMatches("11112222", "1");System.out.println(n);
------------以下是我自己加的,非翻译------------
StringUtils.countMatches原理是这样的:
public static int countMatches(CharSequence str, CharSequence sub) { if (isEmpty(str) || isEmpty(sub)) { return 0; } int count = 0; int idx = 0; while ((idx = CharSequenceUtils.indexOf(str, sub, idx)) != INDEX_NOT_FOUND) { count++; idx += sub.length(); } return count; }即循环使用indexOf,累加看有多少个。
StringUtils.repeat原理是这样的:
public static String repeat(String str, int repeat) { // Performance tuned for 2.0 (JDK1.4) if (str == null) { return null; } if (repeat <= 0) { return EMPTY; } int inputLength = str.length(); if (repeat == 1 || inputLength == 0) { return str; } if (inputLength == 1 && repeat <= PAD_LIMIT) { return repeat(str.charAt(0), repeat); } int outputLength = inputLength * repeat; switch (inputLength) { case 1 : return repeat(str.charAt(0), repeat); case 2 : char ch0 = str.charAt(0); char ch1 = str.charAt(1); char[] output2 = new char[outputLength]; for (int i = repeat * 2 - 2; i >= 0; i--, i--) { output2[i] = ch0; output2[i + 1] = ch1; } return new String(output2); default : StringBuilder buf = new StringBuilder(outputLength); for (int i = 0; i < repeat; i++) { buf.append(str); } return buf.toString(); } }先计算总长度,然后用StringBuilder累加。
原文地址:http://www.programcreek.com/2013/09/top-10-faqs-of-java-strings/
原文标题:Top 10 questions of Java Strings
- 最常问到的关于JAVA String的10个问题
- Java中关于String类型的10个问题
- Java中关于String类型的10个问题
- Java中关于String类型的10个问题
- Java中关于String类型的10个问题
- Java中关于String类型的10个问题
- Java中关于String类型的10个问题
- Java中关于String类型的10个问题
- Java中关于String类型的10个问题
- Java中关于String类型的10个问题
- Java中关于String类型的10个问题
- Java中关于String类型的10个问题
- Java中关于String类型的10个问题
- Java中关于String类型的10个问题
- Java中关于String类型的10个问题
- Java中关于String类型的10个问题
- Java中关于String类型的10个问题
- Java 中关于 String 类型的 10 个问题
- ios检测有无网络连接
- 完全二叉树叶子结点的算法
- 增加熟练度。。。
- _stdcall,_cdecl区别
- Unity 3D同PHP数据交互案例
- 最常问到的关于JAVA String的10个问题
- 基于PhoneGap与Java开发的Android应用的性能对比
- 通过 view视图 找到所属的视图控制器
- perl ||=
- C-Store: A Column-oriented DBMS(4)
- Graphics 倒置文字
- 我的新博客地址,以后的文章都会发在新站点~~~
- android 隐私数据加密方法
- View的层次结构