String大全

JavaString类和常用方法

实例化String对象

第一直接赋值

package com.qn.array;

public class Test4 {
 public static void main(String[] args) {
 String name="zhangsan";
 System.out.println("姓名:"+name);

 }
}

结果

姓名:zhangsan

第二

String str=new String();

package com.qn.array;

public class Test4 {
 public static void main(String[] args) {
 String name=new String("zhangsan");
 System.out.println("姓名:"+name);
 }
}

结果

结果

姓名:zhangsan

String的内容比较

因为基本类型是使用“==”进行数据比较
下面首先使用“==”进行比较

package com.qn.array;

public class Test4 {
 public static void main(String[] args) {
 int x,y;
 x=32;
 y=32;
 System.out.println("基本数据类型进行比较:"+(x==y));
 String str1="zhangsan";
 String str2=new String("zhangsan");
 String str3=str2;
 System.out.println("str1==str2-->"+(str1==str2));
 System.out.println("str2==str3-->"+(str2==str3));
 }
}

结果

基本数据类型进行比较:true
str1==str2-->false
str2==str3-->true


这里使用的判断相等,是判断的地址空间是否相等,判断的是地址值

如果要判断内容是否相等,则必须使用String类中提供的equals()方法完成

package com.qn.array;

public class Test4 {
 public static void main(String[] args) {
 String str1="zhangsan";
 String str2=new String("zhangsan");
 String str3=str2;
 System.out.println("str1==str2-->"+str1.equals(str2));
 System.out.println("str1==str3-->"+str1.equals(str2));
 System.out.println("str2==str3-->"+str2.equals(str3));
 }
}

结果

str1==str2-->true
str1==str3-->true
str2==str3-->true

结论
一种使用“==”比较的是地址值
另一种使用“equals”方法完成:比较的是具体的内容

两种实例化方式的区别

String中可以直接赋值,和new进行实例化,哪一种更合适?

一个字符串就是String类的匿名对象

比如 "hello".equals("hello")

Stmbvnnring str1="zhangsan";

就表示将一个堆内存空间的指向给了栈内存

事例

package com.qn.array;

public class Test4 {
 public static void main(String[] args) {
 String str1="zhangsan";
 String str2="zhangsan";
 String str3="zhangsan";
 System.out.println("str1==str2-->"+(str1==str2));
 System.out.println("str1==str3-->"+(str1==str2));
 System.out.println("str2==str3-->"+(str2==str3));

 }
}

结果

str1==str2-->true
str1==str3-->true
str2==str3-->true

这个时候他们的地址是一样的


使用直接赋值的方式可以节约内存

使用new的方式

public class Test4 {
 public static void main(String[] args) {
 String str1=new String("zhangsan");

 }
}


使用new的方式开辟了两次空间,因为String str=new String("hello");

这个("hello")本身就是一个匿名对象,此时已经开辟了堆内存空间,而此时再次尽心new的时候new String("hello");又一次开辟了内存空间,所以一共开辟了两次内存空间

使用直接赋值的方式只需要一个实例化对象即可,而使用new String()的方式则意味着开辟两个内存对象,最好使用直接赋值的方式完成

下面:字符串的内容不可改变

package com.qn.array;

public class Test4 {
 public static void main(String[] args) {
 String str="hello";
 str=str+",world";
 System.out.println(str);
 }
}

结果

hello,world
此时字符串对象是改变了,但是字符串并没有改变


实际上字符串的改变实际上改变的是内存地址的引用关系

在开发中要避免下面的操作

package com.qn.array;

public class Test4 {
 public static void main(String[] args) {
 String str="hello";
 for (int i = 0; i <10; i++) {//循环改变内容
 str=str+i;//字符串的引用不断改变
 }
 }
}

下面String类的常用方法



将字符串变为字符数组

char[]()
 将此字符串转换为一个新的字符数组。

package com.qn.array;

public class Test4 {
 public static void main(String[] args) {
 String str="hello";
 char c[]= str.toCharArray();
 for (int i = 0; i < c.length; i++) {
 System.out.print(c[i]+"");
 }
 }
}

结果

hello

将字符数组变为字符串

(char[] value)
 分配一个新的 String,使其表示字符数组参数中当前包含的字符序列。

package com.qn.array;

public class Test4 {
 public static void main(String[] args) {
 String str="hello";
 char c[]= str.toCharArray();
 for (int i = 0; i < c.length; i++) {
 System.out.print(c[i]+"");
 }
 String str1=new String(c);
 System.out.println("\n"+str1);
 }
}

结果

hello
hello

取出指定位置的字符

char(int index)
 返回指定索引处的 char值。

package com.qn.array;

public class Test4 {
 public static void main(String[] args) {
 String str="hello";
 char c= str.charAt(3);
 System.out.println(c);
 }
}

结果

l

字符串与byte数组的转换

byte数组(字节数组),在一般的io操作中经常用到
String类中提供了下面的方法

字符串变为字节数组

byte[]()
 使用平台的默认字符集将此 String编码为 byte 序列,并将结果存储到一个新的 byte 数组中。

将一个字节数组变为字符串

(byte[] bytes)
 通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String

将部分字节数组变为字符串

(byte[] bytes, int offset, int length)
 通过使用平台的默认字符集解码指定的 byte 子数组,构造一个新的 String

package com.qn.array;

public class Test4 {
 public static void main(String[] args) {
 String str="hello";
 byte [] bytes=str.getBytes();
 System.out.println(new String(bytes));
 System.out.println(new String(bytes,1,3));
 }
}

结果

hello
ell

取得字符串的长度

package com.qn.array;

public class Test4 {
 public static void main(String[] args) {
 String str="hellofdsafdsafdsadfs";
 System.out.println("长度:"+str.length());

 }
}

结果

长度:20
注意:在操作数组的时候可以使用“数组名字.length”,那么这里习惯性的在字符串操作的地方也使用“字符串.length”的格式,后面没有括号,str是一个对象这里的length是一个方法。

查找指定的字符串是否存在

int(int ch)
 返回指定字符在此字符串中第一次出现处的索引。

int(int ch, int fromIndex)
 返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索。

查找的时候方法的返回值是 一个int类型的数据,此数据表示的是一个字符串的位置,如果没有则返回-1

package com.qn.array;

public class Test4 {
 public static void main(String[] args) {
 String str="abcdefghijklmnccc";
 System.out.println("c:"+str.indexOf("c"));
 System.out.println("c:"+str.indexOf("c",4));
 System.out.println("c:"+str.indexOf("c",15));
 }
}

结果

c:2
c:14
c:15

取得空格

 trim ()
 返回字符串的副本,忽略前导空白和尾部空白。


如果假设一些信息是由用户输入的话,则就可能出现多余的空格,在这种操作中可以使用trim()取得字符串的左右空格,但是字符串中间的空格是不能去掉的

package com.qn.array;

public class Test4 {
 public static void main(String[] args) {
 String str=" hello aa ";
 System.out.println("没有取得的时候:"+str);
 System.out.println("取得左右空格后:"+str.trim());
 }
}

结果

没有取得的时候: hello aa
取得左右空格后:hello aa

字符串截取

取出字符串中的部分内容

 (int beginIndex)
 返回一个新的字符串,它是此字符串的一个子字符串。从截取处到尾

 (int beginIndex, int endIndex)
 返回一个新字符串,它是此字符串的一个子字符串。从指定的范围中截取

package com.qn.array;

public class Test4 {
 public static void main(String[] args) {
 String str="hello world";
 System.out.println(str.substring(5));//6到最后
 System.out.println(str.substring(5, 9));
 }
}

结果

world
 wor

拆分字符串

[]( regex)
 根据给定的匹配拆分此字符串。

[]( regex, int limit)
 根据匹配给定的来拆分此字符串。

需要正则支持的

package com.qn.array;

public class Test4 {
 public static void main(String[] args) {
 String str="hello world";
 String s[]=str.split(" ");//按空格进行拆分
 for (int i = 0; i < s.length; i++) {
 System.out.print(s[i]+"");
 }
 }
}

结果

helloworld

大小写转换

小写变成大写

package com.qn.array;

public class Test4 {
 public static void main(String[] args) {
 String str="hello";
 String str1="ABC";
 System.out.println(str.toUpperCase());
 System.out.println(str1.toLowerCase());
 }
}

结果

HELLO
abc

不区分大小写 equalsIgnoreCase();

package com.qn.array;

public class Test4 {
 public static void main(String[] args) {
 String str="hello";
 String str1="HELLO";
 System.out.println(str.equalsIgnoreCase(str1));
 System.out.println(str1.equals(str));
 }
}

结果

true
false
字符串替换功能

package com.qn.array;

public class Test4 {
 public static void main(String[] args) {
 String str="hello";
 String newStr=str.replaceAll("l", "x");
 System.out.println("替换之后的内容:"+newStr);
 }
}

结果

替换之后的内容:hexxo

 

std::string 是 C++ 标准库中的一个常用字符串类,提供了许多操作和功能。下面是 std::string 的使用大全,包括详细的举例说明: 1. 创建和初始化: ```cpp #include <string> std::string str1; // 创建一个空的字符串 std::string str2 = "Hello"; // 使用字符串字面值初始化 std::string str3(str2); // 使用一个现有的字符串进行拷贝构造 std::string str4(5, 'X'); // 创建一个包含 5 个 'X' 的字符串 ``` 2. 获取和修改字符: ```cpp std::string str = "Hello"; char first = str[0]; // 获取第一个字符 char last = str.back(); // 获取最后一个字符 str[0] = 'J'; // 修改第一个字符为 'J' str.push_back('!'); // 在末尾添加一个字符 str.pop_back(); // 删除末尾的一个字符 // 使用迭代器遍历字符串 for (std::string::iterator it = str.begin(); it != str.end(); ++it) { std::cout << *it << " "; } ``` 3. 拼接和连接字符串: ```cpp std::string str1 = "Hello"; std::string str2 = "World"; std::string result = str1 + " " + str2; // 字符串拼接 str1 += str2; // 将 str2 连接到 str1 的末尾 result.append("!"); // 在末尾添加字符串 result.insert(5, " C++"); // 在指定位置插入字符串 result.erase(6, 4); // 删除指定位置的一段字符串 ``` 4. 查找和替换子字符串: ```cpp std::string str = "Hello, world!"; size_t found = str.find("world"); // 查找子字符串的位置 if (found != std::string::npos) { std::cout << "Substring found at position: " << found << std::endl; } str.replace(7, 5, "C++"); // 替换指定位置的子字符串 ``` 5. 获取字符串的长度和子串: ```cpp std::string str = "Hello, world!"; int length = str.length(); // 获取字符串的长度 std::string sub1 = str.substr(0, 5); // 获取从位置 0 开始的 5 个字符的子串 std::string sub2 = str.substr(7); // 获取从位置 7 开始到末尾的子串 ``` 6. 其他常用操作: ```cpp std::string str = " Hello, World! "; str = str + "C++"; // 去除首尾空格 str.erase(0, str.find_first_not_of(' ')); str.erase(str.find_last_not_of(' ') + 1); std::transform(str.begin(), str.end(), str.begin(), ::tolower); // 将字符串转换为小写 if (str.empty()) { std::cout << "String is empty" << std::endl; } ``` 这些是 std::string 的常用操作和功能,你可以根据实际需要进行进一步的学习和使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值