Java String常见问题

一、如何判断两个String是否相等??使用”==“还是使用”equals()“?

对String来说,”==“是用来判断两个字符串(对象)的地址是否相同,即判断是否是同一个字符串的应用。”equals()“则是判断两个字符串(对象)的值是否相等,如果相等则返回true。一般情况下,都是使用”equals()“来判断两个字符串的值是否相等,只有当你需要判断两个字符串是否是同一个对象时,才使用”==“。

<span style="font-size:18px;">String str1 = "abc";
String str2 = "abc";
String str3 = new String("abc");
System.out.println(str1 == str2);    //true
System.out.println(str1 == str3);    //false
System.out.println(str1.equals(str3));     //tru</span>

二、如何实现String与基本数据类型的装换

首先了解一下如何将String转换为基本的数据类型。8个wrapper class(Integer,Double….)提供了相对应的方法parseXxx(String str)将字符串转换为基本的数据类型,如下:

String str1 = "123";

String str2 = "12.3";

String str3 = "true";

int a = Integer.parseInt(str1);     
//123

double d = Double.parseDouble(str2);
//12.3

boolean flag = Boolean.parseBoolean(str3);
//true

也许会见过使用valueOf()的转换,如下:

String str1 = "123";

String str2 = "12.3";

String str3 = "true";

int a = Integer.valueOf(str1);
//123

double d = Double.valueOf(str2);    
//12.3

boolean flag = Boolean.valueOf(str3);     
//true

这种形式也行,只不过没有直接使用parseXxx()好,因为Integer.valueOf()返回的是Integer类型,再通过自动集装箱转换为基本数据类型,其方法原型如下:

publicstatic Integer valueOf(String s)

注意的是,方法Boolean.parseBoolean(Stringstr),只有在str为字符串“true”时(忽略大小写),才会返回true。换句话说就是其他字符串都是返回false。Boolean.parseBoolean(“yes”)将返回false。接着下来看一下如何将基本数据类型转换为String,可以使用String.valueOf()方法进行转换,如下:

int a = 123;

double b = 13.05;

boolean flag =
true;

String str1 = String.valueOf(a);    
//123

String str2 = String.valueOf(b);    
//13.05

String str3 = String.valueOf(flag); 
//true

同时还有着更为简单快捷的方式,直接在基本数据类型之后添加“”,如下;

String str1 = a +"";   
//a

String str2 = flag + "";
//true

最后谈一下wrapper class的转换,同样可以将基本数据类型转换为String,如下:

int a = 123;

boolean flag =
true;

String str1 = Integer.toString(a);  
//123

String str2 = Boolean.toString(flag);     
//true

事实上,String.valueOf()方法也是调用了各种wrapper  class的toString()方法,如下。只不过String.valueOf()用起来会方便一点,因为不需要去判断数据属于哪一种类型。

publicstatic String valueOf(double d) {

return Double.toString(d);//其余的转换都与之类似

}

三、如何分割字符串

在java里分割字符串是通过正则表达式来分割的,在此我只是简单谈论一下如何分割,想深入了解正则表达式的,可以点击 这里

首先看一个简单的例子,如下使用“-”来分割字符串,

String str = "aa-bb-cc-dd";

String[] res = str.split("-");
//aa bb cc dd

看起来很简单,只需要在找出分割复就行了,如你想使用“c”作为分割符,那输出就是aa-bb-  -dd。另外再看一下,使用空格符(\s)来分割字符串(Space键,tab键或者换行符),如下:

String str4 = "aa bb cc dd";

String[] res = str4.split("\\s");   
//aa bb cc dd

在这里就有点不同的,在java里反斜线(\)有着特别的含义,为避免混淆或者出现异常, 应该使用(\\),类似的,看一下使用“|”分割字符串,

String str4 = "aa|bb|cc|dd";

String[] res = str4.split("\\|");   
//aa bb cc dd

四、取子串

String str = "abcdefg";

str = str.substring(2, 5);    
//cde

在java7里,substring会创建一个字符串,如果是在java6,倡导使用如下方式:

String str = "abcdefg";

str = str.substring(2, 5)+""; 
//cde

关于substring在java6和java7的区别,可以查阅相关文档。

五、如何将字符串转换日期

String str = "2014-6-27";

SimpleDateFormat format =
new SimpleDateFormat();

format.applyPattern("yyyy-MM-dd");

Date date = format.parse(str);

System.out.println(date);

六、String,StringBuilder,StringBuffer的区别

String与StringBuilder的区别,String是创建之后不可以再修改,StringBuilder是可变的,创建之后可以修改。StringBuilder与StringBuffer的区别,StringBuffer是线程安全的,执行速度相对StringBuffer会慢一点。

七、在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

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

<span style="font-size:18px;">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 = newchar[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 = newchar[repeatTimes];
            for(int i = repeatTimes-1; i >=0; i--){
                  //复制repeatTimes
                  buf[i] = ch;
            }

            return buf.toString();
      }</span>

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

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

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

System.out.println(n);

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

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

Java String常见问题

时间: 2024-10-10 07:17:25

Java String常见问题的相关文章

java String 类 基础笔记

字符串是一个特殊的对象. 字符串一旦初始化就不可以被改变. String s = "abc";//存放于字符串常量池,产生1个对象 String s1=new String("abc");//堆内存中new创建了一个String对象,产生2个对象 String类中的equals比较字符串中的内容. 常用方法: 一:获取 1.获取字符串中字符的个数(长度):length();方法. 2.根据位置获取字符:charAt(int index); 3.根据字符获取在字符串中

Java String字符串/==和equals区别,str。toCharAt(),getBytes,indexOf过滤存在字符,trim()/String与StringBuffer多线程安全/StringBuilder单线程—— 14.0

课程概要 String 字符串 String字符串常用方法 StringBuffer StringBuilder String字符串: 1.实例化String对象 直接赋值  String str="Hello";  推荐这种 使用关键字new  String str1=new String("Hello"); 在内存中开辟2个空间 如图: 源代码 StringDemo01.java 2.String内容的比较 String str="Hello"

java String 两种不同的赋值 比较

原文http://blog.163.com/[email protected]/blog/static/1271436362012101214031911/ 在此感谢博主写出这么优秀的文章. 首先明确一点,String是一个类.下面我们主要讨论两个问题  a) String类的对象的两种赋值方式  b) 为什么String类的对象可以直接赋值  a) 1 类似普通对象,通过new创建字符串对象.String str = new String("Hello"); 内存图如下图所示,系统会

java string,需要进行首字母大写改写

java string,需要进行首字母大写改写,网上大家的思路基本一致,就是将首字母截取,转化成大写然后再串上后面的,类似如下代码 //首字母大写     public static String captureName(String name) {         name = name.substring(0, 1).toUpperCase() + name.substring(1);        return  name;           } 将字符串name 转化为首字母大写.但是

Java String类

JAVA String类[转] 1.String对象的初始化 由于String对象特别常用,所以在对String对象进行初始化时,Java提供了一种简化的特殊语法,格式如下: String s = “abc”; s = “Java语言”; 其实按照面向对象的标准语法,其格式应该为: String s = new String(“abc”); s = new String(“Java语言”); 只是按照面向对象的标准语法,在内存使用上存在比较大的浪费.例如String s = new String

java String 空指针异常

如下代码中,第8行和第10行均会提示Exception in thread "main" java.lang.NullPointerException. 第12行的写法可行. 1 import java.util.*; 2 import java.io.*; 3 4 public class test { 5 public static void main(String[] args) { 6 7 String a = null; 8 if (a.equals(""

java String.split()函数的用法分析

在java.lang包中有String.split()方法的原型是:public String[] split(String regex, int limit)split函数是用于使用特定的切割符(regex)来分隔字符串成一个字符串数组,函数返回是一个数组.在其中每个出现regex的位置都要进行分解.需要注意是有以下几点:(1)regex是可选项.字符串或正则表达式对象,它标识了分隔字符串时使用的是一个还是多个字符.如果忽略该选项,返回包含整个字符串的单一元素数组.(2)limit也是可选项.

Java String API

java.lang包: String; /*java String * String对象一旦创建其内容便不会改变 * * */ Construct: String(byte[] bytes) String(byte[] bytes, int offset, int length) String(char[] value) String(char[] value, int offset, int count) Method: String obj=new String(); obj.length(

java基础知识回顾之---java String final类普通方法

辞职了,最近一段时间在找工作,把在大二的时候学习java基础知识回顾下,拿出来跟大家分享,如果有问题,欢迎大家的指正. /*     * 按照面向对象的思想对字符串进行功能分类.     *      *      * 1,获取:     * 1.1 获取字符串中字符的个数(长度).     *         int length();     * 1.2 取字符串中的某一个字符,其中的参数index指的是字符串中序数.字符串的序数从0开始到length()-1 .     *