十个最常见的Java字符串问题(翻译)

翻译自:Top 10 questions of Java Strings

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);

附加题
怎样检测一个字符串只包含大写字母

翻译自:Top 10 questions of Java Strings

(0)

相关推荐

  • Java中的字符串用法小结

    本文实例总结了Java中的字符串用法.分享给大家供大家参考.具体分析如下: 字符串的本质是char类型的数组,但在java中,所有用双引号""声明的字符串都是一个String类的对象.这也正体现了Java完全面向对象的语言特点. String 类 1.String类对象表示的是一个常量字符串.它是不可变长度的.也就是说,一旦创建了一个String类的实例,那么这个实例所表示的串是不可改变的.类似于 str = str + "Hello"; 这样的操作,实质上是将 s

  • Java中的字符串常量池详细介绍

    Java中字符串对象创建有两种形式,一种为字面量形式,如String str = "droid";,另一种就是使用new这种标准的构造对象的方法,如String str = new String("droid");,这两种方式我们在代码编写时都经常使用,尤其是字面量的方式.然而这两种实现其实存在着一些性能和内存占用的差别.这一切都是源于JVM为了减少字符串对象的重复创建,其维护了一个特殊的内存,这段内存被成为字符串常量池或者字符串字面量池. 工作原理 当代码中出现字

  • java字符串相似度算法

    本文实例讲述了java字符串相似度算法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: public class Levenshtein {     private int compare(String str, String target) {         int d[][]; // 矩阵         int n = str.length();         int m = target.length();         int i; // 遍历str的      

  • java 截取字符串(判断汉字)

    复制代码 代码如下: /** * 截取字符串 len为字节长度 * @param str * @param len * @return * @throws UnsupportedEncodingException */ public static String getLimitLengthString( String str,int len){ try{ int counterOfDoubleByte = 0; byte[] b = str.getBytes("gb2312"); if

  • 两种用空格分隔的java字符串的方式

    两种方式: 1. String str = "123 456 789 111"; String [] strArray = str.split("s"); 2.String str = "123 456 789 111"; String [] strArray = str.split(" "); 3.多个空格,不管有多少空格就分隔 String str = "123 456 789 111"; String

  • java拼接字符串时去掉最后一个多余逗号的方法

    本文实例讲述了java拼接字符串时去掉最后一个多余逗号的方法.分享给大家供大家参考.具体分析如下: 先看下面这段代码: for (int t = 0; t < memberLen; t++) { memTemp = stafferMap.get(strMember[t]); if(memTemp != null){ memberNames += memTemp + ","; } } 以上的代码,拼接的字符串会多一个",",比如:"str1,str2,

  • Java截取字符串的方法

    本文实例讲述了Java截取字符串的方法.分享给大家供大家参考.具体实现方法如下: public static void main(String args[]) { //以该字符第一次出现,开始截取 //String str="abc.def"; //String str="abc.def.sdfsdf.fsdfd.ddddd.ggggg.ttttt"; //String str1=str.substring(str.indexOf(".")+1,

  • 从字符串中截取等长字节的Java代码

    在页面显示的时候,有时候文字无法显示完全,就只能显示部分文字,但是直接截取就只能截取等长字符串,英文和中文很难处理所以就写了下面方法,截取等长字符 复制代码 代码如下: public static void main(String[] args) { String str = "20120131:<回家>1你好么" ; System.out.println( subString(str , 10 ) ) ;  } public static String subString

  • Java 按照字节来截取字符串的代码(不会出现半个汉字)

    复制代码 代码如下: /* *    Copyright 2012-2013 The Haohui Network Corporation */package com.haohui.common.utils; /** * <pre> * 字符串辅助工具 * </pre> *  * @project baidamei * @author cevencheng <cevencheng@gmail.com> * @create 2012-11-30 下午2:42:56 */p

  • 十个最常见的Java字符串问题(翻译)

    翻译自:Top 10 questions of Java Strings 1.怎样比较字符串?用"=="还是用equals()? 简单地说,"=="测试两个字符串的引用是否相同,equals()测试两个字符串的值是否相同.除非你希望检查两个字符串是否是同一个对象,否则最好用equals(). 如果你知道字符串驻留机制会更好. 2.为什么对于安全性敏感的信息char[]要优于String? 字符串是不变的,这也就意味着字符串一旦被创建,它们将一直保持在那直到被垃圾回收

  • 浅谈十个常见的Java异常出现原因

    异常是 Java 程序中经常遇到的问题,我想每一个 Java 程序员都讨厌异常,一 个异常就是一个 BUG,就要花很多时间来定位异常问题. 1.NullPointerException 空指针异常,操作一个 null 对象的方法或属性时会抛出这个异常.具体看上篇文章:空指针常见案例. 2.OutofOutofMemoryError 内存出现异常的一种异常,这不是程序能控制的,是指要分配的对象的内存超出了当前最大的堆内存,需要调整堆内存大小(-Xmx)以及优化程序. 3.IOException I

  • JAVA字符串拼接常见方法汇总

    字符串的拼接,常使用到的大概有4种方式: 1.直接使用"+"号 2.使用String的concat方法 3.使用StringBuilder的append方法 4.使用StringBuffer的append方法 由于String是final类型的,因此String对象都是属于不可变对象,因此,在需要对字符串进行修改操作的时候(比如字符串的连接或者是替换),String总是会生成新的对象. 1."+" 如果不考虑其他,使用"+"号来连接字符串无疑是最

  • Java字符串常见的操作(比较,查找,替换等)

    目录 一,字符串的比较 1,equal()方法 2,compareTo()方法 二,字符串查找 1,contains()方法 2, indexOf()方法 3,startsWith()和endsWith()方法 三,字符串替换 replaceAll()方法 四,字符串拆分 split()方法 五,字符串截取 substring()方法 六,字符串其他常见的操作方法 1,trim()方法 2,toUpperCase()和toLowerCase()方法 3,length()方法 3,reverse(

  • JAVA字符串格式化-String.format()的使用

    本篇介绍JAVA字符串格式化-String.format()的使用,具体如下: 常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语言的同学应该记得C语言的sprintf()方法,两者有类似之处.format()方法有两种重载形式. format(String format, Object... args) 新字符串使用本地语言环境,制定字符串格式和参数生成格式化的新字符串. format(Locale locale, String for

  • Java 字符串的拼接详解

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

  • java 字符串的拼接的实现实例

    java 字符串的拼接的实现实例 在实际的开发工作中,对字符串的处理是最常见的编程任务.本题目即是要求程序对用户输入的串进行处理.具体规则如下: 1. 把每个单词的首字母变为大写. 2. 把数字与字母之间用下划线字符(_)分开,使得更清晰 3. 把单词中间有多个空格的调整为1个空格. 例如: 用户输入: you and     me what  cpp2005program 则程序输出: You And Me What Cpp_2005_program 用户输入: this is     a  

  • java字符串格式化(String类format方法)

    常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象. format()方法有两种重载形式. 显示不同转换符实现不同数据类型到字符串的转换,如图所示: 测试用例: public static void main(String[] args) { String str=null; str=String.format("Hi,%s", "王力"); System.out.println(str); str=String.fo

  • 一篇文章看懂Java字符串操作

    目录 字符, 字节与字符串 字符与字符串 字节与字符串 字符串常见操作 字符串比较 字符串查找  字符串替换  字符串拆分  字符串截取 其他操作方法 总结 字符, 字节与字符串 字符与字符串 字符串内部包含一个字符数组,String 可以和 char[] 相互转换. NO 方法名称 类型 描述 1 public String(char value[]) 构造 将字符数组中的所有内容变字符串 2 public String(char value[],int offset,int count) 构

  • Java字符串编码知识点详解介绍

    在 Java 中,当我们处理String时,有时需要将字符串编码为特定字符集.编码是一种将数据从一种格式转换为另一种格式的方法.字符串对象使用 UTF-16 编码.UTF-16 的问题在于它不能被修改.只有一种方法可以用来获得不同的编码,即 byte[] 数组.如果我们得到意外的数据,编码的方式是不合适的.在本节中,我们将学习如何在Java中对字符串进行编码. 在继续本节之前,我们必须了解字符编码.让我们快速浏览一下.让我们了解为什么我们需要对字符串进行编码. 字符编码是一种将文本数据转换为二进

随机推荐