Java--字符串
【摘要】 String 类保存字符串。String 类本质是一个 final 对象,由引用指向存储字符串对象的地址。引用虽然可变,但内存数据不能被更改。创建字符串String 对象创建后一经赋值不再改变,有以下两种创建方式:直接赋值:如果常量池没有,则在常量池新建对象。否则直接使用常量池中已有对象,引用指向常量池。构造方法:如果常量池没有,则在常量池新建对象。无论如何一定会在堆区创建对象,引用指向堆区...
String 类
保存字符串。String 类本质是一个 final 对象,由引用指向存储字符串对象的地址。引用虽然可变,但内存数据不能被更改。
创建字符串
String 对象创建后一经赋值不再改变,有以下两种创建方式:
-
直接赋值:如果常量池没有,则在常量池新建对象。否则直接使用常量池中已有对象,引用指向常量池。
-
构造方法:如果常量池没有,则在常量池新建对象。无论如何一定会在堆区创建对象,引用指向堆区。
String str1 = "string"; // 引用指向常量池
String str2 = "str" + "ing"; // 引用指向常量池(指向 str1 的字符串对象)
String str3 = new String("string"); // 引用指向堆区(在堆区新建字符串对象)
String str4 = str1 + str2; // 引用指向堆区
String newStr = new String(str.getBytes("ISO-8859-1"), "GBK"); // 获取指定类型编码对象,按指定类型编码Copy to clipboardErrorCopied
String 对象创建后一经赋值不再改变。对字符串数据进行改变,实际是创建新的 String 对象,并改变引用指向新的对象。
str1 = "goodbye"; // str1 指向新的字符串对象Copy to clipboardErrorCopied
常用方法
int len = str.length(); // 返回字符串长度
String[] strs = str.split(","); // 按分隔符分解字符串
boolean c = str.contains(str2); // 判断是否存在子字符串
int index = str.indexOf(str2); // 查找子字符串出现的第一个位置,没有返回-1
int index = str.lastIndexOf(str2); // 查找子字符串出现的最后一个位置,没有返回-1
String str2 = str.trim(); // 去除字符串左右空格
String str2 = str.substring(0,3); // 截取指定位置(0-2)的子字符串
String str2 = str.replace("a", "b"); // 新字符 a 替换旧字符 bCopy to clipboardErrorCopied
类型转换
// Number > String
String s1 = data.toString(); // data 必须为包装数据类型
String s2 = Integer.toString(data); // data 可以为基础数据类型,包括字符数组 char[]
String s3 = String.valueOf(data); // data 可以为基础数据类型,包括字符数组 char[]
// String > char
char c = str.charAt(0);
char[] ch = str.toCharArray();
// String > int
int n1 = Integer.parseInt(str);
int n2 = Integer.valueOf(str);Copy to clipboardErrorCopied
StringBuilder / StringBuffer 类
由于 String 类不可变性,对其频繁更改往往会产生较多临时变量类,占用大量内存。对此我们通常使用 StringBuilder/StringBuffer 来避免,这两个类允许在原有内存地址对字符串进行操作。其中 StringBuilder 类性能更好,StringBuffer 类线程安全。
创建字符串
必须通过构造方法创建,不可以直接赋值的形式创建:。StringBuffer str = "hello";
字符串默认长度为16,超出后会进行自动扩容。
StringBuffer str = new StringBuffer("hello");Copy to clipboardErrorCopied
将 StringBuilder / StringBuffer 类转化为 String 类。
String str2 = str.toString(); Copy to clipboardErrorCopied
专用方法
StringBuilder / StringBuffer 类可以使用 String 类的全部方法,还新增了以下方法直接对字符串进行修改。
str.append("add"); // 末尾添加字符串,也可以是其他基础类型
str.insert(0,"insert"); // 指定位置插入字符串,也可以是其他基础类型
str.deleteCharAt(6); // 删除指定位置(6)的字符
str.delete(6,8); // 删除指定位置(6和7)的字符串
str.reverse(str2); // 翻转字符串Copy to clipboardErrorCopied
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)