String类

# String类

## 概述

字符串是被final修饰的类,无法继承

字符串是常量

字符串可以被共享

## 字符串的拼接

“`java
public static void method() {
String s1 = “ab”;
// s2是字面量,在编译期间已经变成了”ab”
String s2 = “a” + “b”;
// 在编译到这一行时,知道s3是”a”
String s3 = “a”;
// 在编译这一行时候,只知道s3是String类型,不能确定其值
/*
相当于
StringBuilder stringBuilder = new StringBuilder(“a”);
// 拼接字符串
stringBuilder.append(“b”);
String s = stringBuilder.toString();
System.out.println(s);
*/
s3 += “b”;

System.out.println(s1);
System.out.println(s2);
System.out.println(s3);
System.out.println(s1 == s2);// true
System.out.println(s1 == s3);// false
}
“`

“`java
public static void method() {
// long startTime = new Date().getTime();
// String str = “”;
// for (int i = 0; i < 100000; i++) { // str += "a"; // } // long endTime = new Date().getTime(); // System.out.println(endTime - startTime); long startTime = new Date().getTime(); //记录开始时间 StringBuilder stringBuilder = new StringBuilder(); for (int i = 0; i < 10000000; i++) { stringBuilder.append("a"); } String str = stringBuilder.toString(); long endTime = new Date().getTime(); //记录结束时间 System.out.println(endTime - startTime); } ``` ## 3常用方法 ### 1.根据索引获取对应的字符 ```java public static void method() { //输出字符串中下标为1的字符 String str = "abcd"; char c1 = str.charAt(1); System.out.println(c1); } ``` ```java public static void method() { String str = "abcd"; // 获取字符串的长度 System.out.println(str.length()); // 把字符串转换成字符数组 char[] chars = str.toCharArray(); System.out.println(chars); } ``` ```java public static void method() { String str = "abcd"; char c1 = str.charAt(1);// ---> b
System.out.println(c1);

// 获取字符串的长度
System.out.println(str.length()); //—>4
// 把字符串转换成字符数组
char[] chars = str.toCharArray();
System.out.println(chars); //—>abcd

// 把字符数组转换成字符串
char[] chs = {‘h’, ‘e’, ‘l’, ‘l’, ‘o’};
// String s = new String(chs);
// 把字符数组的一部分转换成字符串
// offset:表示截取字符数组的起始索引
// count:截取的长度
String s = new String(chs, 1, 3);// 新建字符串对象为数组,内容为原数组下标1-3指向的元素
System.out.println(s);// —>ell
}
“`

### 练习 1. 输入字符串和两个数字,按照输入的数字对字符串进行截取,并且要求包头不包尾

“`java
public static void method() {
Scanner scanner = new Scanner(System.in);
String str = scanner.next();
int start = scanner.nextInt();
int end = scanner.nextInt();
if (start < 0 || start > end || end > str.length() || end < 0) { System.out.println("输入不合法"); return; } // 把字符串转换成数组 char[] chars = str.toCharArray(); // 把字符数组中被选取的部分转化为字符串 String s = new String(chars, start, end - start); System.out.println(s); } ``` ### 练习2:统计字符串中英文大写 小写 数字和其他字符的个数 ```java public static void method() { // 统计字符串中英文大写 小写 数字和其他字符的个数 System.out.println("请输入字符串"); String str = new Scanner(System.in).next(); // 定义变量 统计大写 小写 数字 其他字符 int upperNum = 0; int lowerNum = 0; int num = 0; int otherNum = 0; // 获取每一个字符判断 for (int i = 0; i < str.length(); i++) { char ch = str.charAt(i); if (ch >= ‘A’ && ch <= 'Z') { upperNum++; } else if (ch >= ‘a’ && ch <= 'z') { lowerNum++; } else if (ch >= ‘0’ && ch <= '9') { num++; } else { otherNum++; } } System.out.println("大写字母有" + upperNum + "个"); System.out.println("小写字母有" + lowerNum + "个"); System.out.println("数字字符有" + num + "个"); System.out.println("其他字符有" + otherNum + "个"); } ``` ### 练习3:输入一个字符串,求其中数字的和 ```java public static void method() { String str = new Scanner(System.in).next(); int sum = 0; char[] chars = str.toCharArray(); for (char aChar : chars) { // 判断是否是数字 if (aChar >= ‘0’ && aChar <= '9') { sum += (aChar - '0'); } } System.out.println(sum); } ``` ### 练习:输入一个字符串,统计字符出现的次数。 ```java public static void method() { // 输入一个字符串,统计字符出现的次数 Scanner scanner = new Scanner(System.in); String str = scanner.next(); // 定义数组,存放是否被统计过的标记 boolean[] bs = new boolean[str.length()]; // 遍历数组 for (int i = 0; i < bs.length; i++) { // 判断是否被统计过 if (bs[i]) continue; //如果 bs[i] 为 true,则表示当前位置的字符已经统计过了,跳过本次循环,继续下一个字符。 // 获取字符 char ch = str.charAt(i); // 定义变量统计出现的次数 int count = 0; for (int j = i; j < str.length(); j++) { if (str.charAt(j) == ch) { count++; bs[j] = true; } } System.out.println(ch + "出现了" + count + "次"); } } ``` ### 常用方法 ```java public static void method() { /*字符串是以字节数组形式存储 在比较两个字符数组的时候,是进行逐位比较 如果对应字符不相等返回的是字符之差 如果字符相同,返回的是长度之差 如果返回的是一个正数, 对象 > 参数
如果返回的是一个负数,参数 > 对象
System.out.println(str.compareTo(str1));
*/
// 忽略大小写比较
System.out.println(str.compareToIgnoreCase(str1));

// 把字符串转换成大写
System.out.println(str.toUpperCase());

// 把字符串转换成小写
System.out.println(str1.toLowerCase());

// 字符串的拼接 本质上是将两个字节数组合并成一个字节数组再转换成字符串返回
System.out.println(str.concat(“abc”));

// 拼接字符串
System.out.println(String.join(“-“, “谷丰硕”, “尚马教育”, “30”, “男”));

// 判断是否包含某一个字符串
System.out.println(str.contains(“ad”));

// 比较字符串是否相等
System.out.println(“ABCD”.equals(str1));

// 忽略大小写比较字符串
System.out.println(“abcd”.equalsIgnoreCase(str1));

// 把字符串转换成字节数组
// utf-8一个汉字占3个字节
byte[] bytes = str.getBytes();
System.out.println(str.length());
System.out.println(bytes.length);

// 指定编码来将字符串转换成数组
// gbk 一个汉字占两个字节
byte[] gbks = str.getBytes(“gbk”);
System.out.println(gbks.length);

// 将字节数组转换成字符串
String s = new String(bytes, “utf-8”);
System.out.println(s);

// 指定编码转换
String gbk = new String(gbks, “GBK”);
}

“`

## 关键字: instanceof

用于判断类/接口和对象的关系

格式:

“`
对象 instanceof 类/接口 只要这个对象的实际类型是后面类或者其子类,或者接口的实现类,那么就返回true

interface A{}
class B implements A{}
class C extends B{}
class D extends C{}

C c = new D();
c instanceOf A — true
c instanceOf B — true
c instanceOf C — true
c instanceOf D — true
“`

### 练习:输入一个字符串和一个数字,数字表示字节的个数,按照指定的字节个数截取字符串(不要出现乱码),编码用gbk

“`java
public static void method() {
// 输入一个字符串和一个数字,数字表示字节的个数,按照指定的字节个数截取字符串(不要出现乱码),编码用gbk
Scanner scanner = new Scanner(System.in);
String str = scanner.next();
System.out.println(“请输入要截取的字节”);
int n = scanner.nextInt();
// 将字符串转换成字节数组
byte[] bs = str.getBytes(“gbk”);

// 按照用户指定的字节进行截取
String sub = new String(bs, 0, n, “gbk”);
// 获取可能乱码的索引
int index = sub.length() – 1;
if (sub.charAt(index) != str.charAt(index)) {
// 出现乱码
sub = new String(bs, 0, n – 1, “gbk”);
}
System.out.println(sub);
}
“`

## 常用方法

“`java
public static void method() {

String str = “D:\\img\\sifangzhao\\me.png”;
// 同一个字符串的哈希码值是固定不变的
System.out.println(str.hashCode());

// 获取指定元素首次出现的索引,如果找不到返回-1
System.out.println(str.indexOf(‘a’, 1));
System.out.println(str.indexOf(“k”));

String str1 = new String(“abc”);

// 获取字符串的字面量
System.out.println(str == str1.intern());

// 判断字符串是否是空 判断底层数组长度是否是0
System.out.println(str.isEmpty());

// 判断字符串是否是空字符串或者全是空格
System.out.println(str.isBlank());

// 寻找对应字符最后一次出现的索引
int index = str.lastIndexOf(“a”);
System.out.println(index);

// 从fromIndex开始依次向前找
int index1 = str.lastIndexOf(“a”, 7);
System.out.println(index1);

String repeat = str.repeat(3);
System.out.println(repeat);
System.out.println(str.replace(‘a’, ‘A’));

// 截取字符串 从beginIndex截取到最后
String substring = str.substring(3);

// 截取一部分,包头不包尾
String substring = str.substring(3, 6);
System.out.println(substring);

System.out.println(str.substring(str.lastIndexOf(“\\”) + 1));

// 生成验证码
String code = UUID.randomUUID().toString().substring(0, 6);
System.out.println(code);

// 去除字符串两端空格
String str2 = ” hello 我是 “;
System.out.println(str2.trim());

System.out.println(new Object());

// 将对应的类型转换成字符串
String s = String.valueOf(10);
System.out.println(s);
String s1 = String.valueOf(new Object());
System.out.println(s1);
}
“`

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇