一、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. PHP制作留言板

    做基础的留言板功能  需要三张表: 员工表,留言表,好友表 首先造一个登入页面: <form action="drcl.php" method="post" ...

  2. 关于Mobx中装饰器语法的环境配置

    1.弹出项目配置 npm run eject 此处注意,若弹出项目配置失败,请先执行以下两行代码(若没有安装git则请跳过,本人是在安装git的情况下解决问题的) 1.git add . 2.git ...

  3. Python 3前言

    Python具有简单.易学.免费.开源.可移植.可扩展.可嵌入.面向对象等优点,它的面向对象甚至比java和C#.net更彻底. 作为一种通用语言,Python几乎可以用在任何领域和场合,角色几乎是无 ...

  4. 全球首款完全开源的堡垒机,符合 4A 的专业运维审计系统Jumpserver

    Jumpserver是全球首款完全开源的堡垒机,是符合 4A 的专业运维审计系统. http://www.jumpserver.org https://github.com/jumpserver/ju ...

  5. orcle 如何快速插入百万千万条数据

    有时候做实验测试数据用到大量数据时可以用以下方法插入: 方法一:使用xmltable create table bqh8 as select rownum as id from xmltable('1 ...

  6. 【转】Java学习---算法那些事

    [更多参考] LeetCode算法 每日一题 1: Two Sum ----> 更多参考[今日头条--松鼠游学] 史上最全的五大算法总结 Java学习---7大经典的排序算法总结实现 程序员都应 ...

  7. October 11th 2017 Week 41st Wednesday

    If you don't know where you are going, you might not get there. 如果你不知道自己要去哪里,你可能永远到不了那里. The reward ...

  8. Spirng MVC 重定向传递对象

    在 Spring MVC 中我们会经常遇到重定向. @RequestMapping("/order/saveorder.html") public String saveOrder ...

  9. Alpha冲刺报告(8/12)(麻瓜制造者)

    今日已完成 邓弘立: 完成了对主页UI控件的更新 符天愉: 没有完成留言模块,只是完成了留言的查询并且将留言多级回复格式化,同时和队友一起部署了商品发布的接口 江郑: 经过了这几天的编码,需求方面的数 ...

  10. Oracle修改表空间为自动扩展

    https://gqsunrise.iteye.com/blog/2015692 1.数据文件自动扩展的好处1)不会出现因为没有剩余空间可以利用到数据无法写入2)尽量减少人为的维护3)可以用于重要级别 ...