String类 的基本用法
1.String 对象的创建
String对象的创建有两种方式。
第1 种方式就是我们最常见的创建字符串的方式:
String str1 = "Hello, 慕课网";
第 2 种方式是对象实例化的方式,使用new
关键字,并将要创建的字符串作为构造参数:
String str2 = new String("Hello, Java");
如果调用 String 类的无参构造方法,则会创建一个空字符串:
String str3 = new String();
此处的str3就是一个空字符串。
2.String类常用的API方法
1.获取字符串长度:int length()
2.获取指定位置字符:char charAt(int index)
String str = "I love Java"; char c = str.charAt(7); System.out.println("索引位置为7的字符为:" + c); // J
3.查找字符串位置:
1.indexOf()
获取字符或子串在字符串中第一次出现的位置。
String str = "I love Java, I love imooc!"; int i = str.indexOf('a'); System.out.println("字符a在字符串str第一次出现的位置为:" + i); // 8 int i = str.indexOf("love"); System.out.println("子串love在字符串str第一次出现的位置为:" + i); // 2
2.lasIndexOf()
获取字符或子串在字符串中最后一次出现的位置。
String str = "I love Java, I love imooc!"; int i = str.lastIndexOf('e'); System.out.println("字符e在字符串str最后一次出现的位置为:" + i); // 18 int i = str.lastIndexOf("I love"); System.out.println("字串I love在字符串str最后一次出现的位置为:" + i); // 13
注意:以上方法的参数都是区分大小写的。也就无法在I love Java
中查找到字符E
。如果没有查找,上述方法都会返回一个整型值:-1
。
String str = "I love Java"; int i = str.indexOf('E'); System.out.println(i); // -1
4.字符串截取: substring()
1.String substring(int beginIndex)
获取从beginIndex
位置开始到结束的子串。
2.String substring(int beginIndex, int endIndex)
获取从beginIndex
位置开始到endIndex
位置的子串(不包含endIndex
位置字符)。
String str = "I love Java"; String substring = str.substring(2); String substring1 = str.substring(2, 6); System.out.println("从索引位置2到结束的子串为:" + substring); // love java System.out.println("从索引位置2到索引位置6的子串为:" + substring1); // love
5. 字符串切割
1.切割为字串数组:String[] split(String regex)
String str1 = "I love Java"; // 将字符串str1以空格分隔,并将分割结果赋值给strArr数组 String[] strArr = str1.split(" "); // 遍历数组,打印每一个元素 for (String str: strArr) { System.out.print(str + '\t'); }
注意,有几种特殊的分隔符:*
^
:
|
.
\
,要使用转义字符转义。
// 以*切割
String str2 = "I*love*Java";
String[] strArr2 = str2.split("\\*"); // 以\切割
String str3 = "I\\love\\Java";
String[] strArr4 = str3.split("\\\\"); // 以|切割
String str4 = "I|love|Java";
String[] strArr4 = str4.split("\\|");
2.切割为 byte 数组:getBytes()
在实际工作中,网络上的数据传输就是使用二进制字节数据。因此字符串和字节数组之间的相互转换也很常用。
public class Demo{
public static void main(String[] args) {
String str2 = "我喜欢Java";
System.out.println("将字符串转换为byte数组:");
// 将字符串转换为字节数组
byte[] ascii = str2.getBytes();
// 遍历字节数组,打印每个元素
for (byte aByte : ascii) {
System.out.print(aByte + "\t");
}
}
}
运行结果: 将字符串转换为byte数组:
-26 -120 -111 -27 -106 -100 -26 -84 -94 74 97 118 97
将字节数组转换为字符串的方法很简单,直接实例化一个字符串对象,将字节数组作为构造方法的参数即可:
// 此处的ascii为上面通过字符串转换的字节数组
String s = new String(ascii);
6.字符串大小写转换
1.toLowerCase()
将字符串转换为小写
2.toUpperCase()
将字符串转换为大写
public class Demo {
public static void main(String[] args) {
String str = "HELLO world";
String s = str.toLowerCase();
System.out.println("字符串str为转换为小写后为:" + s);
String s1 = s.toUpperCase();
System.out.println("字符串s为转换为大写后为:" + s1);
}
}
如果想把字符串HELLO world
中的大小写字母互换,该如何实现呢?
public class Demo{
public static void main(String[] args) {
String str = "HELLO world";
// 先切割为数组
String[] strArr = str.split(" ");
// 将数组中元素转换大小写并连接为一个新的字符串
String result = strArr[0].toLowerCase() + " " + strArr[1].toUpperCase();
System.out.println("字符串str的大小写互换后为:" + result);
}
}
3.String类比较
public class Demo {
public static void main(String[] args) {
// 用两种方法创建三个内容相同的字符串
String str1 = "hello";
String str2 = "hello";
String str3 = new String("hello");
System.out.println("使用equals()方法比较str1和str2的结果为:" + str1.equals(str2));
System.out.println("使用==运算符比较str1和str2的结果为:" + (str1 == str2));
System.out.println("使用equals()方法比较str1和str3的结果为:" + str1.equals(str3));
System.out.println("使用==运算符比较str1和str3的结果为:" + (str1 == str3));
}
// 代码中三个字符串str1,str2和str3的内容都是hello,因此使用equals()方法对它们进行比较,其结果总是为true。
// 其中使用==运算符比较str1和str2的结果为true,但使用==运算符比较的str1和str3的结果为false。这是因为==运算符比较的是两个变量的地址而不是内容。
}
运行过程:
1. 当执行String str1 = "hello;"
语句时,会在内存的栈空间中创建一个str1
,在常量池中创建一个"hello",并将str1
指向hello
。
2.当执行String str2 = "hello";
语句时,栈空间中会创建一个str2
,由于其内容与str1
相同,会指向常量池中的同一个对象。
所以str1
与str2
指向的地址是相同的,这就是==
运算符比较str1
和str2
的结果为true
的原因。
3. 当执行String str3 = new String("hello");
语句时,使用了new
关键字创建字符串对象,由于对象的实例化操作是在内存的堆空间进行的,此时会在栈空间创建一个str3
,在堆空间实例化一个内容为hello
的字符串对象,并将str3
地址指向堆空间中的hello
,这就是==
运算符比较str1
和str3
的结果为false
的原因。
String类 的基本用法的更多相关文章
- 关于Java的对象、数组、String类的具体用法
对象的行为: 1.内存分配(栈和堆的区别) 栈:保存局部变量的值(用来保存基本数据类型的值:保存类的实例的引用) 对:用来存放动态产生的数据,比如new出来的对象 2.调用方法 方法返回一个值.方法不 ...
- C++程序设计入门(上) string类的基本用法
string类中的函数 1. 构造 2. 追加 3. 赋值 4. 位置与清除 5. 长度与容量 6. 比较 7. 子串 8. 搜索 9. 运算符 追加字符串 string s1("Welc ...
- String类的基本用法与注意点,StringBuffer类的用法
package cn.hncu.day8; public class RegExpDemo { public static void main(String[] args) { String str ...
- C++中string类的基本用法
#include <iostream> #include <set> using namespace std; int main() { string line; getlin ...
- HDOJ4550 卡片游戏 随便销毁内存的代价就是wa//string类的一些用法
思路 标记最小的最后的位置 放在第一位 标记位置之前按left值小的左方大的右方 标记位置之后按顺序放在最后 不多说先贴上销毁内存的wa代码 销毁内存的wa代码 #include<cstdio ...
- hadoop中Text类 与 java中String类的区别
hadoop 中 的Text类与java中的String类感觉上用法是相似的,但两者在编码格式和访问方式上还是有些差别的,要说明这个问题,首先得了解几个概念: 字符集: 是一个系统支持的所有抽象字符的 ...
- 面向对象基础——String类
String类的两种实例化方法 A:直接赋值 public class StringDemo01{ public static void main(String args[]){ String na ...
- 16 String类
java中的所有的字符串文字(例如"abc","123")都可以看做是实现了此类的实例对象 eg: String str = new String(); str ...
- 标准C++中的string类的用法总结
标准C++中的string类的用法总结 相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用.但是如果离开了MFC框架,还有 ...
随机推荐
- ArcMap操作随记(1)
1.用python代码,将属性表中属性进行合并 代码:'ID'+str(!FID!) 2.地类编码与地类的转换 以python为例 显示代码块(预逻辑脚本代码): def getType(value) ...
- java 实现装饰器设计模式
package com.gylhaut.base; /** * 装饰器 * 类与类之间的关系 * 1.依赖:形参(局部变量) * 2.关联:属性 * 聚合 属性 整体和部分 不一致的生命周期 人和手 ...
- unity 加载网络图片
摘要:利用Http加载网络图片. 解决思路: 1.直接用unity 自带的www加载,在高版本www已经过时了. 2.本文直接使用万能的文件流加载. (1)使用System.Net.HttpWebRe ...
- Android 12(S) 图形显示系统 - BufferQueue的工作流程(十一)
题外话 我竟然已经写了这个系列的十一篇文章了,虽然内容很浅显,虽然内容很枯燥,虽然内容也许没营养,但我为自己的坚持点赞! 一.前言 前面的两篇文章,分别讲解了Producer的处理逻辑和queue b ...
- 反射getattr
@property 将类中的方法伪装成属性 与@property相关的俩个 @方法.setter 修改操作 @方法.deleter 删除一个property属性的时候会执行被de ...
- vue2.x版本中computed和watch的使用入门详解-关联和区别
前面两篇介绍了computed和watch的基本使用 watch篇 computed篇 两者的区别,继续通过代码实现的方式具体去了解 html <li>最开始的value值:{{ name ...
- bzoj2084/luoguP3501 [Poi2010]Antisymmetry(回文自动机+dp)
bzoj2084/luoguP3501 [Poi2010]Antisymmetry(回文自动机+dp) bzoj Luogu 对于一个01字符串,如果将这个字符串0和1取反后,再将整个串反过来和原串一 ...
- 到底为什么不建议使用SELECT *?
"不要使用SELECT *"几乎已经成为了MySQL使用的一条金科玉律,就连<阿里Java开发手册>也明确表示不得使用*作为查询的字段列表,更是让这条规则拥有了权威的加 ...
- 关于“TypeError: Assignment to constant variable”的问题解决方案
在项目开发过程中,在使用变量声明时,如果不注意,可能会造成类型错误比如: Uncaught (in promise) TypeError: Assignment to constant variabl ...
- tomcat 部署war,umask上传文件后无法通过nginx反向代理访问上传后的文件
Catalina.sh文件,把umask修改为 0022 即可. 引用:https://tomcat.apache.org/tomcat-8.5-doc/security-howto.html