整理十个最Java字符串常见问题

分享本人工作学习中java的10个字符串问题。

1.怎样比较字符串?用”==”还是用equals()?

  简单地说,”==”测试两个字符串的引用是否相同,equals()测试两个字符串的值是否相同。除非你希望检查两个字符串是否是同一个对象,否则最好用equals()。

  如果你知道字符串驻留机制会更好。

 2.为什么对于安全性敏感的信息char[]要优于String?

  字符串是不变的,这也就意味着字符串一旦被创建,它们将一直保持在那直到被垃圾回收器清理为止。而对于一个数组,你可以明确的修改它的元素。这样一来,安全性敏感信息(比如密码)将不会出现在系统的任何其它地方。

 3.我们能不能在switch语句中使用String?

  对于Java7答案是肯定的。从JDK7开始,我们可以使用String作为switch语句的条件。在JDK6之前,我们不能使用String作为switch语句的条件。

// java 7 only!
switch (str.toLowerCase()) {
      case "a":
           value = 1;
           break;
      case "b":
           value = 2;
           break;
}

 4.怎样把字符串转换为整数?

int n = Integer.parseInt("10");

  很简单,使用太过频繁以致有时候会被忽略。

 5.怎样分解一个有空白字符的字符串?

  我们可以简单的用正则表达式来做分解。”\s”代表空白字符,例如” “,”\t”,”\r”,”\n”。

String[] strArray = aString.split(\\s+);

 6.substring()方法真正做了什么?

  在JDK6中,substring()方法提供了一个表示已有字符串的字符数组的窗口,但并没有创建一个新的字符串。要创建一个由新的字符数组表示的新字符串,可以像下面一样添加一个空串:

str.substring(m, n) + ""

  这样就创建一个表示新字符串的全新的字符数组。上面的方法有时候会使代码更快,因为垃圾回收器会回收掉大的不用的字符串,只保留一个子串。 在Oracle JDK 7中,substring()创建一个新的字符数组,不用已有的数组。The substring() Method in JDK 6 and JDK 7 中的图表说明了JDK 6和JDK 7的substring()之间的差异。

 7.String vs StringBuilder vs StringBuffer

  String vs StringBuilder:StringBuilder是可变的,这意味着在创建之后人能够改变它的值。 StringBuilder vs StringBuffer:StringBuffer是同步的,这意味着它是线程安全的,但比StringBuilder更慢。

 8.怎样重复一个字符串?

  在Python中,我们可以通过乘以一个数来重复字符串。在Java中,我们可以通过Apache Commons Lang包中的StringUtils类的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 Commons Lang包中的StringUtils类。

int n = StringUtils.countMatches("11112222", "1");
System.out.println(n);

时间: 2024-11-01 22:10:12

整理十个最Java字符串常见问题的相关文章

关于java字符串去重的问题

问题描述 关于java字符串去重的问题 今天碰到个java字符串去重的问题,尝试着用另一种方法TreeSet去做一下,出来的结果确实去重了,但是会按abcd的顺序排列,而不是给定的字符串顺序.问一下怎么纠正? public void Method_2(String str) { // 原始输入 System.out.println("原始的字符串:" + str); long startTime = System.nanoTime(); // 将输入转为字符串数组 String[] a

Java 字符串的拼接详解_java

工作日忙于项目的逻辑实现,周六有点时间,从书柜里拿出厚厚的英文版Thinking In Java,读到了字符串对象的拼接.参考着这本书做个翻译,加上自己思考的东西,写上这篇文章记录一下. 不可变的String对象 在Java中,String对象是不可变的(Immutable).在代码中,可以创建多个某一个String对象的别名.但是这些别名都是的引用是相同的. 比如s1和s2都是"droidyue.com"对象的别名,别名保存着到真实对象的引用.所以s1 = s2 String s1

java实现归并排序和树形排序(锦标赛制):java字符串分隔或的形式

String[] b=str.split("query|,");//query分隔或者逗号分隔 归并排序,递归实现 public class MergeSort2 { // 对data数组中的 [a,b) 区间的数据进行归并排序, // 排序结束后,[a,b)间数据处于升序有序状态 static void mergeSort(int[] data, int a,int b) { if (a >= b) return; int mid=(a+b)/2;//拆分排序 mergeSor

JAVA字符串转日期或日期转字符串

文章中,用的API是SimpleDateFormat,它是属于java.text.SimpleDateFormat,所以请记得import进来! 用法: SimpleDateFormat sdf = new SimpleDateFormat( " yyyy-MM-dd HH:mm:ss " ); 这一行最重要,它确立了转换的格式,yyyy是完整的公元年,MM是月份,dd是日期,至于 HH:mm:ss就不需要我再解释了吧! PS:为什么有的格式大写,有的格式小写,那是怕避免混淆,例如MM

Java字符串分割

1. java.lang.String 的 split() 方法, JDK 1.4 or later split public String[] split(String regex, int limit) 根据匹配给定的正则表达式来拆分此字符串. 此方法返回的数组包含此字符串的每个子字符串,这些子字符串由另一个匹配给定的表达式的子字符串终止或由字符串结束来终止.数组中的子字符串按它们在此字符串中的顺序排列.如果表达式不匹配输入的任何部分,则结果数组只具有一个元素,即此字符串. limit 参数

Java字符串排序中文+数字

  思路: 在Java中,排序需要复写的是 equals 方法 和 Comparable<T> 接口 的public int compareTo(T o); 方法 步骤: 1. 使用正则表达式来判断数字,多个连续的数字作为一组, 2. 一次检索出数字组合, 3. 检出下一组数字,如果有,则进入步骤4,否则进入步骤6. 4. 如果两组数字出现的位置相等,并且前面部分的字符串相等,则进入第5步.否则break,跳到第6步. 5. 如果前面部分的字符串完全一致.则比较两个数字的大小,如果大小一致,则

java字符串拆分,求解,在线等,急用

问题描述 java字符串拆分,求解,在线等,急用 [美元/日元] [超买超卖]请注意:美元/日元威廉指标出现超卖情况,指标利多,现价为109.17 这段话需要拆分成三部分: [美元/日元] [超买超卖] 请注意:美元/日元威廉指标出现超卖情况,指标利多,现价为109.17 求代码.谢谢 解决方案 Pattern p = Pattern.compile("(\[.*?\])\s+(\[.*?\])(.*)"); Matcher m = p.matcher("[美元/日元] [超

java字符串,查abcd出现的次数

问题描述 java字符串,查abcd出现的次数 为了弄清某类考试中,选择题答案abcd的分布情况,需要统计abcd出现的次数.现从键盘输入一行由abcd构成的答案字符串,统计并输出abcd出现的次数.(如果未出现,则次数输出0) 解决方案 http://www.2cto.com/kf/201412/361778.html 解决方案二: 你输入的字符串并不多的,可以把它们放到一个字符数组里,然后分别用a,b,c,d来和字符数组里的字符比较,然后定义三个变量,如果a和字符里某个角标的值相等, 就让一

java字符串转化小白求解!

问题描述 java字符串转化小白求解! 输入个人信息,将出生日期中的月日用*代替并输出. 老师出的题,做了4个多小时,实在不会做了,求教各位大神! 解决方案 Date的构造函数中,年是以1900开始的,因此输入的年份要减去1900,月份是0-11代表12个月,0代表1月份,因此输入的月份要减1.日是完全对应. int year = 1996; int month = 10; int day = 11; Date date = new Date(year - 1900 month - 1 day)