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类 的基本用法的更多相关文章

  1. 关于Java的对象、数组、String类的具体用法

    对象的行为: 1.内存分配(栈和堆的区别) 栈:保存局部变量的值(用来保存基本数据类型的值:保存类的实例的引用) 对:用来存放动态产生的数据,比如new出来的对象 2.调用方法 方法返回一个值.方法不 ...

  2. C++程序设计入门(上) string类的基本用法

    string类中的函数 1. 构造 2. 追加 3. 赋值 4. 位置与清除 5. 长度与容量 6. 比较 7. 子串 8. 搜索 9. 运算符 追加字符串 string s1("Welc ...

  3. String类的基本用法与注意点,StringBuffer类的用法

    package cn.hncu.day8; public class RegExpDemo { public static void main(String[] args) { String str ...

  4. C++中string类的基本用法

    #include <iostream> #include <set> using namespace std; int main() { string line; getlin ...

  5. HDOJ4550 卡片游戏 随便销毁内存的代价就是wa//string类的一些用法

    思路 标记最小的最后的位置  放在第一位 标记位置之前按left值小的左方大的右方 标记位置之后按顺序放在最后 不多说先贴上销毁内存的wa代码 销毁内存的wa代码 #include<cstdio ...

  6. hadoop中Text类 与 java中String类的区别

    hadoop 中 的Text类与java中的String类感觉上用法是相似的,但两者在编码格式和访问方式上还是有些差别的,要说明这个问题,首先得了解几个概念: 字符集: 是一个系统支持的所有抽象字符的 ...

  7. 面向对象基础——String类

    String类的两种实例化方法  A:直接赋值 public class StringDemo01{ public static void main(String args[]){ String na ...

  8. 16 String类

    java中的所有的字符串文字(例如"abc","123")都可以看做是实现了此类的实例对象 eg: String str = new String(); str ...

  9. 标准C++中的string类的用法总结

    标准C++中的string类的用法总结 相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用.但是如果离开了MFC框架,还有 ...

随机推荐

  1. VB、VBA、VBS的区别与联系

      概念 VB Visual Basic(简称VB)是Microsoft公司开发的一种通用的基于对象的程序设计语言,为结构化的.模块化的.面向对象的.包含协助开发环境的事件驱动为机制的可视化程序设计语 ...

  2. ArcMap从建库到出图

    1前言 本篇博主将介绍关于ArcMap建库.数据采集.拓扑检查.图表.制作符号等的基本操作. 2问题阐述 (1)检查现有block(线要素)图层,保证所有要素闭合,并将其转换为parcel(面要素): ...

  3. RocketMQ 事务消息示例分析

    @ 目录 1 示例模式 2 安装与配置 RocketMQ 3 运行服务 3.1 启动 NameServer 3.2 启动 broker 4 生产者 4.1 事务监听器 4.2 事务消息生产者 5 消费 ...

  4. Java基础——ArrayList

    Java基础--ArrayList 作用:提供一个可变长度的集合,底层实际上是一个可变长度的数组 格式:ArrayList <E> arr=new ArrayList<>(); ...

  5. MongoDB 镜像配置方法

    镜像下载.域名解析.时间同步请点击 阿里巴巴开源镜像站 MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. 配置方法 安装 ...

  6. zookeeper可视化WEB工具(zkui)搭建与配置

    前提:zookeeper 可视化WEB工具zkui依赖java环境,因此需要安装jdk,同时zkui源码要Maven编译,需要安装apache-maven. JDK下载地址:https://www.o ...

  7. HTTP 之 Content-Type

    Content-Type,内容类型,一般是指网页中存在的Content-Type,用于定义网络文件的类型和网页的编码,决定文件接收方将以什么形式.什么编码读取这个文件,这就是经常看到一些Asp网页点击 ...

  8. 【文件系统】dumpe2fs命令

    dumpe2fs - dump ext2/ext3/ext4 filesystem information dumpe2fs prints the super block and blocks gro ...

  9. C#: .net序列化及反序列化 [XmlElement(“节点名称”)] [XmlAttribute(“节点属性”)] (下篇)

    介绍 XML 序列化 .NET Framework 开发员指南   序列化是将对象转换为容易传输的格式的过程.例如,可以序列化一个对象,然后使用 HTTP 通过 Internet 在客户端和服务器之间 ...

  10. 采用WPF开发第二版OFD阅读器,持续完善中,敬请期待!

    本人研究OFD多年,采用C#和QT开发了一系列ofd相关软件.在这些产品中,阅读器始终占据着非常重要的位置.可以说,阅读器是直接面向最终客户的产品.是集OFD各类知识之大成的产品.市面上的阅读器产品林 ...