loading

Java_5 字符串

Java 字符串

title:(在线学习平台) link:(https://www.acwing.com/) cover:(https://cdn.acwing.com/media/activity/surface/log.png)

0 Scanner

Scanner sc=new Scanner(System.in);

  1. sc.hasNext():是否有下一个输入

1. 字符与整数的联系——ASCII码

每个常用字符都对应一个-128 ~ 127的数字,二者之间可以相互转化。注意:目前负数没有与之对应的字符。

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        char c = 'a';
        System.out.println((int)c);

        int a = 66;
        System.out.println((char)a);
    }
}
  • 常用ASCII值:'A'- 'Z'65 ~ 90'a' - 'z'97 - 1220 - 948 - 57空格32
  • 字符可以参与运算,运算时会将其当做整数:
import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        int a = 'B' - 'A';
        int b = 'A' * 'B';
        char c = 'A' + 2;

        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
    }
}

2. String类

  • 初始化
String a = "Hello World";
String b = "My name is ";
String x = b;  // 存储到了相同地址
String c = b + "yxc";  // String可以通过加号拼接
String d = "My age is " + 18;  // int会被隐式转化成字符串"18"
String str = String.format("My age is %d", 18);  // 格式化字符串,类似于C++中的sprintf
String money_str = "123.45";
double money = Double.parseDouble(money_str);  // String转double

  • 只读变量,不能修改,例如:
String a = "Hello ";
a += "World";  // 会构造一个新的字符串
  • 访问String中的字符:
String str = "Hello World";
for (int i = 0; i < str.length(); i ++ ) {
    System.out.print(str.charAt(i));  // 只能读取,不能写入
}
  • 常用API:

    • length():返回长度
    • split(String regex):分割字符串
    • indexOf(char c)indexOf(String str)lastIndexOf(char c)lastIndexOf(String str):查找,找不到返回-1
    • equals():判断两个字符串是否相等,注意不能直接用==
    • compareTo():判断两个字符串的字典序大小,负数表示小于,0表示相等,正数表示大于
    • startsWith():判断是否以某个前缀开头
    • endsWith():判断是否以某个后缀结尾
    • trim():去掉首尾的空白字符
    • toLowerCase():全部用小写字符
    • toUpperCase():全部用大写字符
    • replace(char oldChar, char newChar):替换字符
    • replace(String oldRegex, String newRegex):替换字符串
    • substring(int beginIndex, int endIndex):返回[beginIndex, endIndex)中的子串
    • toCharArray():将字符串转化成字符数组

3. 输入与输出

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str1 = sc.next();  // 输入字符串,遇到空格、回车等空白字符时停止输入
        String str2 = sc.nextLine();  // 输入一整行字符串,遇到空格不会停止输入,遇到回车才会停止

        System.out.println(str1);  // 可以直接输出
        System.out.printf("%s\n", str2);  // 也可以格式化输出,用 %s 表示字符串
    }
}

4. StringBuilder、StringBuffer

  • String不能被修改,如果打算修改字符串,可以使用StringBuilderStringBuffer

  • StringBuffer线程安全,速度较慢;StringBuilder线程不安全,速度较快。

StringBuilder sb = new StringBuilder("Hello ");  // 初始化
sb.append("World");  // 拼接字符串
System.out.println(sb);

for (int i = 0; i < sb.length(); i ++ ) {
    sb.setCharAt(i, (char)(sb.charAt(i) + 1));  // 读取和写入字符
}

System.out.println(sb);
  • 常用API:
    • reverse():翻转字符串
    • setCharAt(int ,char):设定字符串中某个字符的值
	public class Main {
		public static void main(string[]args)throws Exception {
			StringBuffer sb=new stringBuffer("abcdef");
			for(inti=0;i<sb.length();i++){
				sb.setCharAt(i,(char)(sb.charAt(i)+1));
			}
			System.out.println(sb);
		}
	}

5.删除字符串某索引值

使用StringBuilderappend()
示例代码如下所示:

public class Main {
    public static void main(String[] args) {
        String str = "Hello World";

        // 要删除的索引位置为5(从0开始计数)
        int indexToRemove = 4;

        if (indexToRemove >= 0 && indexToRemove < str.length()) {
            add:[StringBuilder sb = new StringBuilder();]:add

            for (int i = 0; i < str.length(); i++) {
                if (i != indexToRemove) {
                    add:[sb.append(str.charAt(i));]:add
                }
            }

            System.out.println("删除后的字符串:" + sb.toString());
        } else {
            System.out.println("无效的索引位置");
        }
    }
}
posted @ 2024-01-26 13:53  JiajiaMing  阅读(4)  评论(0编辑  收藏  举报