一、String类是什么

  

public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
/** The value is used for character storage. */
private final char value[];

/** Cache the hash code for the string */
private int hash; // Default to 0

/** use serialVersionUID from JDK 1.0.2 for interoperability */
private static final long serialVersionUID = -6849794470754667710L;

  由第一段源码可知,String是一个 final 类,底层实现是final字符数组,一旦创建,无法改变。

  字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。

  关于String内存这点,可以参见:http://www.importnew.com/15671.html

二、如何创建

  String s1 = "abc";//字符串常量池中创建一次(如不存在)

  String s2 = new String("abc");//字符串常量池中和堆中各创建一次

  // 更多的构造器,请参见API

  关于一个比较经典的面试题:String s1 = new String("hello");创建了几个对象的问题,可以参考源码中相关的构造器的源码,结合String的内存分析,便可以从深入进行理解了!

三、常用方法

  第一部分:基本都是见名知意,详细的介绍,请参见API

  

  代码示例:

    @Test
public void test1() {
String str = "HelloWorld";
// length()——字符串的长度
System.out.println(str.length());// 10
// charAt(int)——指定索引处(索引从0开始)的char
System.out.println(str.charAt(2));// 1
// equals(Object)——比较字符串的内容;equalsIgnoreCase不区分大小写的比较
System.out.println("HelloWorld".equals(str));// true
// indexOf()——索引操作(包含几个重载方法);lastIndexOf()为镜像操作,不再赘述
System.out.println(str.indexOf(2)); // -1(不存在2的字符)
System.out.println(str.indexOf("llo")); // 2
// startsWith()——是否以指定字符串开头;endsWith()——为镜像操作
System.out.println(str.startsWith("ello", 1));// true
// regionMatches()——与指定字符串的区域匹配,包含两个重载方法,详细介绍参见API
System.out.println(str.regionMatches(2, "hello", 2, 2));// true
}

  第二部分

  

  代码示例:

  @Test
public void test2() {
String str = "more love";
// subString()——字符串截取,两个重载方法都是左闭的(两个参数的右开)
System.out.println(str.substring(5, 8));// lov
// replace()——进行替换操作;replaceAll是匹配正则表达式的,详细请参见API
System.out.println(str.replace('o', 'e'));// mere leve
// trim()——去除前导空白和尾部空白
System.out.println(str.trim());// mere leve
// concat()——连接字符串
System.out.println(str.concat(" for you")); // more love for you
// split()——根据正则表达式分割字符串,拆分为String[]
System.out.println("a,b,c,d,e".split(",").length);//
}

  以下几个练习题可以试试!

       // 1.如何实现自己的trim
// 通过charAt进行遍历,从头开始遍历到到非空格,再从尾部做一遍,subString()取值即可(注意异常情况)
// 2.反转字符串中的指定的部分
// 将字符串分割成3份,一份前面的,一份需要反转的,一份后面的,再将第2部分反转,添加,再组合成新的字符串
// 3.获取一个字符串在另外一个字符串中出现的次数
// 通过indexOf(String)的循环判断,不断向后判断,直到末尾
// 4.找出两个字符串中最大相同子串
// 将短的串依次递减(第一位减掉,比较;最后一位减掉,比较,整数前两位减掉,循环...)看长串是否包含

  String类与基本数据类型的转换:

 @Test
public void test3() {
String str = "123";
// String转基本数据类型,通过包装类的parse系列方法
int i = Integer.parseInt(str);
// 基本数据类型转String,简单的可以直接+"",通过方法是String.valueOF()
String s = String.valueOf(i); // String与字节数组的转换:str.getBytes()方法得到字节数组;再通过String构造器将字节数组转为字符串
byte[] bytes = str.getBytes();
String s1 = new String(bytes); //String与字符数组的转换:str.toCharArray()方法,char[]转String同样是可以通过构造器
char[] chars = str.toCharArray();
String s2 = new String(chars);
}

四、可变字符串StringBuffer与StringBuilder

   其中,StringBuffer是线程安全的,而StringBuilder是线程不安全的,但它效率更高

   基本构造器:

       StringBuffer sb = new StringBuffer();
StringBuffer sb2 = new StringBuffer("abc");

  // 当然它的底层还是字符数组,但它有容量的概念,修改的时候是可以改变容量的

  用的方法:

  @Test
public void test4() {
StringBuffer sb = new StringBuffer("abc");
// append()——追加
System.out.println(sb.append("def").toString());
// insert()——在指定位置插入
System.out.println(sb.insert(1, "bb"));
// reverse()——反转
System.out.println(sb.reverse().toString());
// 其它和字符串相类似的方法不再赘述
}

Java基础—常用类之String类的更多相关文章

  1. java基础源码 (1)--String类

    这个是String类上面的注释,我用谷歌翻译翻译的,虽然有点语法上的问题,但是大概都可以翻译出来 /** * The {@code String} class represents character ...

  2. 【转】Java 字符串常用操作(String类)

    原文网址:http://www.cnblogs.com/freeabyss/archive/2013/05/15/3187057.html 字符串查找 String提供了两种查找字符串的方法,即ind ...

  3. Java 字符串常用操作(String类)

    字符串查找 String提供了两种查找字符串的方法,即indexOf与lastIndexOf方法. 1.indexOf(String s) 该方法用于返回参数字符串s在指定字符串中首次出现的索引位置, ...

  4. java基础类型数据与String类包装类之间的转换与理解

    数据类型转换一般分为三种: 在java中整型,实型,字符型视为简单数据类型,这些数据类型由低到高分别为:(byte,short,char--int-long-float-double) 简单数据类型之 ...

  5. Java的常用类——Object类、String类

    Java的JDK中提供给我们很多封装好的类就是Java API,可以直接调用. Java 的API(API: Application(应用) Programming(程序) Interface(接口) ...

  6. java中常用的包、类、以及包中常用的类、方法、属性----sql和text\swing

    java中常用的包.类.以及包中常用的类.方法.属性 常用的包 java.io.*; java.util.*; java.lang.*; java.sql.*; java.text.*; java.a ...

  7. Java基础-类加载机制与自定义类Java类加载器(ClassLoader)

    Java基础-类加载机制与自定义类Java类加载器(ClassLoader) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 关于类加载器的概念和分类我就不再废话了,因为我在之前的笔 ...

  8. Java基础-DBCP连接池(BasicDataSource类)详解

    Java基础-DBCP连接池(BasicDataSource类)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 实际开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程 ...

  9. Java 1.7.0_06中String类内部实现的一些变化【转】

    原文链接: java-performance 翻译: ImportNew.com- 夏千林译文链接: http://www.importnew.com/7656.html ChangeLog: 201 ...

  10. Java Object类 和 String类 常见问答 6k字+总结

    写在最前面 这个项目是从20年末就立好的 flag,经过几年的学习,回过头再去看很多知识点又有新的理解.所以趁着找实习的准备,结合以前的学习储备,创建一个主要针对应届生和初学者的 Java 开源知识项 ...

随机推荐

  1. HTML5+CSS (简易nav设计)

    HTML部分: <!DOCTYPE html><html> <head> <title></title> <meta charset= ...

  2. css inline元素和inline-block元素之间缝隙产生原因和解决办法

    行内元素产生水平空隙的原因及解决方案 这篇文章讲的很好,但是提供的解决方案没有这篇好实现 去除inline-block元素间间距的N种方法

  3. onkeydown小练习

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. 自定义data-*

    HTML5的自定义属性data-*详细介绍和JS操作实例 < div id="user" data-id="123456" data-name=" ...

  5. window.event.returnvalue=false;不起作用

    遇到了这个问题,这儿也有人问了, http://bbs.csdn.net/topics/390691844,按着这边的说法,把它换成return false ,试了下果然有效.初学DOM,这两者的区别 ...

  6. 风险指针(Hazard Pointer) 内存空间共享模型

    WiredTiger是一种高性能的开源存储引擎,现已在MongoDB中作为内模式应用.WiredTiger支持行存储.列存储两种存储模式,采用LSM Tree方式进行索引记录 WiredTiger支持 ...

  7. cmd 命令总结

    1.windows 系统定时关机  定时关机:shutdown -s -t 300                 at 18:30 shutdown -s 取消定时:shutdown -a 注意:3 ...

  8. DataContract和DataMember的作用

    数据契约(DataContract)里的DataMember特性  来源于网络,用于个人收集及备忘 数据契约(DataContract) 服务契约定义了远程访问对象和可供调用的方法,数据契约则是服务端 ...

  9. SQL Server 合并复制的Article可以指定单个对象的更新方向

    如下所示,这是SQL Server中一个合并复制发布端的Article: 我们可以在Article中选择一个对象,比如这里我们选择MD.Car表,点击鼠标右键,选择"Set Properti ...

  10. 64位Windows的Dos中取消了edit命令

    前段时间在玩dos命令行的时候,用copy con创建了txt文件后想对其进行编辑,然后我又不想用记事本,所以去网上找命令行中对文本文件进行编辑的命令(纯属想装B),结果看到了edit命令. 一敲,就 ...