Java 常用工具类之 String 类
String 类的特点:
- 字符串对象一旦被初始化就不会被改变.
//以下代码的区别:
String s = "abc"; // 在常量池中创建一个字符串对象, 池中没有就建立, 池中有,直接用.
String s1 = new String("abc"); // 在堆内存中创建两个对象, 一个为 new 对象, 一个为字符串对象 "abc"
System.out.println(s==s1); // false
System.out.println(s.equals(s1)); // String 类中的equals()方法复写了 Object 类中的 equals()方法
// 比较的是字符串的内容, 不是地址
字符串的常见操作方法:
构造函数
- 转换
// 将数组(整体或部分)转换为字符串
byte[] arr = {65,66,67};
String s = new String(arr); // s=abc;
char[] arr1 = {'a','b','c'};
String s1 = new String(arr1); // s=abc
一般方法
查找对象中的方法,需要确定两点: 返回值类型和参数类型
- 获取:
// 1.1 获取字符串中字符的个数(长度), 数组中长度为属性, 直接 array.length 获取即可
int length();
// 1.2 根据位置获取字符
char charAt(int index);
// 1.3 根据字符获取在字符串中第一次出现的位置. 另外, 可以根据 -1,来判断该字符或字符串是否存在
int indexOf(int ch); // 参数为 int, 表示支持 ASCII 码数值
int indexOf(int ch, int fromIndex); // 从指定位置进行查找 ch 第一次出现的位置
int indexOf(String str); // 查找字符串
int indexOf(String str, int fromIndex); // 从指定位置进行查找 str 第一次出现的位置
int lastIndexOf(int ch); //从后往前找
// 1.4 获取字符串中的一部分字符串, 包含 begin, 不包含 end, 返回子字符串对象
String substring(int beginIndex, int endIndex);
String substring(int beginIndex);
- 转换
// 2.1 将字符串转成字符串数组(字符串的切割)
String[] split(String regex); // 传递的是切割规则
// 2.2 将字符串转成字符数组
char[] toCharArray();
// 2.3 将字符串转成字节数组
byte[] getBytes();
// 2.4 将字符串中的字母转成大小写, 返回一个新字符串
String toUpperCase();
String toLowerCase();
// 2.5 将字符串中的内容进行替换
String replace(char oldchar, char newchar()); // 返回一个新的字符串.如果 oldchar 不存在于字符串中, 返回原字符串
String replace(String s1, String s2); // 替换字符串
// 2.6 去除字符串两边空格, 返回一个新的字符串
String trim();
// 2.7 将字符串进行连接
String concat(string);
- 判断
// 3.1 两个字符串内容是否相同
boolean equals(Object obj);
boolean equalsIgnoreCase(String str); // 忽略大写比较字符串内容
// 3.2 字符串中是否包含指定字符串
boolean contains(String str);
// 3.3 字符串是否以指定字符串开头, 是否以指定字符串结尾
boolean startsWith(String prefix);
boolean endsWith(String suffix);
- 比较
// 两个字符串的比较, 返回值为 整数类型
int compareTo(String anotherString);
求两个字符串中最大相同的子串

// "qwerabcdtyuiop" 和 "xcabcdvbn" 中最大相同的子串
// 思路:
// 1. 既然取得是最大子串, 先看短的那个字符串是否在长的那个字符串中.
// 如果存在, 短的那个字符串就是最大子串.
// 2. 如果不是, 那么就将短的那个子串进行长度递减的方式取子串, 去长串中判断是否存在,
// 如果存在就已找到, 就不用在找了.
public static String getMaxSubstring(String s1, String s2){
for(int i = 0; i < s2.length(); i++){
for(int a = 0, b = s2.length()-i; b != s2.length()+1; a++,b++){
String sub = s2.substring(a, b);
if(s1.contains(sub))
return sub;
}
}
return null;
}
StringBuffer 类
- StringBuffer 就是字符串缓冲区
- 用于存储数据的容器
- 相比于数组, StringBuffer 的特点:
- 长度是可变的
- 可以存储不同类型的数据
- 存储的数据最终要转成字符串进行使用
- 可以对字符串进行修改
- 具备的功能,如下:
添加:
StringBuffer append(data); // 在末尾添加数据
StringBuffer insert(int offset, data); // 指定位置插入任意数据
删除, 操作容器删除, 方法不外乎: delete, 或者 remove
StringBuffer delete(int start, int end); // 包含头, 不包含尾
StringBuffer deleteCharAt(int index); // 删除指定位置的元素
查找
char charAt(index);
int indexOf(String str);
int lastIndexOf(String str);
修改
StringBuffer replace(start, end, string); // 替换一段字符, 包含头, 包含尾
void setCharAt(index, char); // 根据指定位置, 替换一个字符
void setLength(); // 设置字符缓冲区长度, StringBuffer 的默认长度为 16 个字符
StringBuffer reverse(); // 反转
- 可变数组的原理:

StringBuilder 类
- JDK 1.5 以后出现了功能和 StringBuffer 一模一样的对象, 就是 StringBuilder
- 两者的不同之处:
- StringBuffer 是线程同步的, 安全.通常用于多线程
- StringBuilder 是线程不同步的, 不安全. 通常用于单线程, 它的出现是为了提高效率, 因为不需要判断锁.
JDK 升级, 注重以下三点:
- 简化书写
- 提高效率
- 增加安全性
参考资料
Java 常用工具类之 String 类的更多相关文章
- JavaEE-实验一 Java常用工具类编程
该博客仅专为我的小伙伴提供参考而附加,没空加上代码具体解析,望各位谅解 1. 使用类String类的分割split 将字符串 “Solutions to selected exercises ca ...
- Java的常用类——Object类、String类
Java的JDK中提供给我们很多封装好的类就是Java API,可以直接调用. Java 的API(API: Application(应用) Programming(程序) Interface(接口) ...
- Java Object类 和 String类 常见问答 6k字+总结
写在最前面 这个项目是从20年末就立好的 flag,经过几年的学习,回过头再去看很多知识点又有新的理解.所以趁着找实习的准备,结合以前的学习储备,创建一个主要针对应届生和初学者的 Java 开源知识项 ...
- Java学习笔记19(String类)
String代表字符串,在Java中,所有的字符串字面值都作为此类的实例实现 字符串的特点以及简单的原理分析: package demo; /* * String类的特点: * 所有的"&q ...
- Java中字符数组、String类、StringBuffer三者的相互转换
一.StringBuffer与String的相互转换 1.将StringBuffer转换成String StringBuffer类成员toString函数可将其转换成String类型. StringB ...
- C#中 StringBuilder类 与 String类的区别---(转)
在找工作的时候,去了些公司,避免不了要面试和笔试.不过一般最起初的是笔试.我印象中有这样有一道题目:StringBuilder类与 String类的区别?那时候我不太清楚这两个类的区别,今天在看代 ...
- Hadoop: Text类和String类的比较
一般认为Text类和String类是等价的,但二者之间其实存在着不小差别: 以<Hadoop权威指南>中的案例为例,给定字符串 String s = "\u0041\u00DF ...
- [转]Java常用工具类集合
转自:http://blog.csdn.net/justdb/article/details/8653166 数据库连接工具类——仅仅获得连接对象 ConnDB.java package com.ut ...
- 项目经验分享——Java常用工具类集合 转
http://blog.csdn.net/xyw591238/article/details/51678525 写在前面 本文涉及的工具类部分是自己编写,另一部分是在项目里收集的.工具类涉及数 ...
随机推荐
- vivado笔记
Vivado主界面 Vivado套件,相当于把ISE.ISim.XPS.PlanAhead.ChipScope和iMPACT等多个独立的套件集合在一个Vivado设计环境中,在这个集合的设计流程下,不 ...
- rownum浅析
对于 Oracle 的 rownum 问题,非常多资料都说不支持>.>=.=.between...and,仅仅能用以上符号(<.<=.!=),并不是说用>, >=, ...
- makefile之call函数
call函数是唯一一个可以创建定制化参数函数的引用函数. 支持对自定义函数的引用; 支持将一个变量定义为一个复杂的表达式,用call函数根据不同的参数对它进行展开来获取不同的结果; 函数语法: $(c ...
- Oracle(2)数据库
1.使用"||"连接多个字段,合并成一列 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFudGluZ21laQ==/font/5a ...
- Ajax实现异步上传图片
要求:点击页面浏览按钮后,选择需要上传的图片,页面无刷新,将上传的图片展示出来 开发流程 一:在页面编写表单代码和js代码 <!DOCTYPE html PUBLIC "-//W3C/ ...
- 栈类Stack
Stack类是Vector类的子类.它向用户提供了堆栈这种高级的数据结构.栈的基本特性就是先进后出.即先放入栈中的元素将后被推出.Stack类中提供了相应方法完成栈的有关操作. 基本方法: publi ...
- jquery如何判断表格同一列不同行input数据是否重复
function hasRepeat(objId,columnIndex){ var arr = []; $("#"+objId+" tbody tr").ea ...
- ZeroMQ一个更小、更快、更简单的智能传输层协议
这个githube上的教程是非常好的,是个中文翻译,大家直接学这个就行 https://github.com/anjuke/zguide-cn/tree/master/bin 原文地址: https: ...
- PHP和JS判断手机还是电脑访问
当用户使用手机等移动终端访问网站时,我们可以通过程序检测用户终端类型,如果是手机用户,则引导用户访问适配手机屏幕的移动站点.本文将介绍分别使用PHP和JAVASCRIPT代码判断用户终端类型. PHP ...
- 让TextView的drawableLeft与文本一起居中显示
TextView的drawableLeft.drawableRight和drawableTop是一个常用.好用的属性,可以在文本的上下左右放置一个图片,而不使用更加复杂布局就能达到,我也常常喜欢用R ...