一、怎样推断两个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

看起来非常easy,仅仅须要在找出切割复即可了。如你想使用“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[]来保存password等敏感信息.

Java String常见问题的更多相关文章

  1. java中String常见问题

    java中String常见问题 1.字符串比较==和equals ==:比较的是对象,判断两个引用的是否为同一内存地址(物理对象) equals:比较的是值 2.通过空白字符拆封字符串 str.spi ...

  2. 从Java String实例来理解ANSI、Unicode、BMP、UTF等编码概念

    转(http://www.codeceo.com/article/java-string-ansi-unicode-bmp-utf.html#0-tsina-1-10971-397232819ff9a ...

  3. Java String.split()小点

    java String.split(); 别的不说,单说其中一个问题,这个函数去切分空字符串时,得到的结果: public static void main(String[] args) {// St ...

  4. Java总结篇系列:Java String

    String作为Java中最常用的引用类型,相对来说基本上都比较熟悉,无论在平时的编码过程中还是在笔试面试中,String都很受到青睐,然而,在使用String过程中,又有较多需要注意的细节之处. 1 ...

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

    java String.split()函数的用法分析 栏目:Java基础 作者:admin 日期:2015-04-06 评论:0 点击: 3,195 次 在java.lang包中有String.spl ...

  6. java string类型的初始化

    以下基本上是java string类型最常用的三种方法 new string()就不介绍了  基本等同于第三种 String a;  申明一个string类型的 a,即没有在申请内存地址,更没有在内存 ...

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

    课程概要 String 字符串 String字符串常用方法 StringBuffer StringBuilder String字符串: 1.实例化String对象 直接赋值  String str=& ...

  8. Java String类详解

    Java String类详解 Java字符串类(java.lang.String)是Java中使用最多的类,也是最为特殊的一个类,很多时候,我们对它既熟悉又陌生. 类结构: public final ...

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

    java string,需要进行首字母大写改写,网上大家的思路基本一致,就是将首字母截取,转化成大写然后再串上后面的,类似如下代码 //首字母大写     public static String c ...

随机推荐

  1. css的存在形式

    1.css的样式,可以写在head头中: 1).通过ID(#CC{}) 2).通过class (.cc{}) 2.可以将样式,单独写入css的某一个页中 1)通过在head头中,引改该css样式,通过 ...

  2. (C/C++学习)17.bitset(位操作)

    说明:bitset 就像 vector 一样,是 C++ 的一个类模板库,用来对一个数的二进制位进行管理.判断等操作,使用时需要包含头文件 #include<bitset>. 1.声明及定 ...

  3. 笔试算法题(54):快速排序实现之单向扫描、双向扫描(single-direction scanning, bidirectional scanning of Quick Sort)

    议题:快速排序实现之一(单向遍历) 分析: 算法原理:主要由两部分组成,一部分是递归部分QuickSort,它将调用partition进行划分,并取得划分元素P,然后分别对P之前的部分和P 之后的部分 ...

  4. python3.x Day4 模块!!

    json and pickle模块 用途是为了持久化信息,这种持久化方式可以和其他程序语言兼容,一般都支持json,json只能持久化数据,pickle是python特有的方式,可以持久化所有信息和数 ...

  5. Python之文件处理-递归删除特定文件

    Python之文件处理-递归删除特定文件 #!/usr/bin/env python # -*- coding:utf-8 -*- import os def delete_particular_fi ...

  6. aggregate和annotate方法使用详解与示例

    aggregate和annotate方法的使用场景 Django的aggregate和annotate方法属于高级查询方法,主要用于组合查询.当我们需要对查询集(queryset)的某些字段进行计算或 ...

  7. MySQL-----多对多

    多对多: 示例1: 用户表和相亲记录表 用户表 用户id 用户名                  性别 1 George  男 2 Elizabeth 女 3 Bruce 男 4 Catherine ...

  8. Thawte SSL Web Server

      Thawte SSL Web Server ,需要验证域名所有权和申请单位信息,属于企业验证(OV)型SSL证书,提供40位/56位/128位,最高支持256位的自适应加密.被2048位的根证书签 ...

  9. XMLREADER/DOM/SIMPLEXML 解析大文件

    DOM和simplexml处理xml非常的灵活方便,它们的内存组织结构与xml文件格式很相近.但是同时它们也有一个缺点,对于大文件处理起来力不从心,太耗内存了. 还好有xmlreader,基于流的解析 ...

  10. UVA 10603_Fill

    题意: 给定三个杯子容量,初始只有第三个杯子满,其余为空,求最少需要倒多少水才能让某一杯子中有d升水,如果不能达到,则小于d且尽量接近. 分析: 因为要求转移水量最少,所以采用优先级队列保存每次的状态 ...