Java语法3 字符串

String的使用

  1. 声明和初始化

可以通过多种方式来声明和初始化string变量,下面是比较常用的几种方式:

在 Java 中,你可以使用双引号直接创建字符串字面值( 字符串文字)来初始化字符串变量。

String name = "Hello, Java";

还可以使用new的方式来创建一个字符串对象。

String message = new String("Hello");
  1. 字符串操作

和数组类似,字符串也提供了一系列对字符串的操作方法,常见的有以下几种:

  • 字符串拼接

Java 支持使用 + 运算符来连接字符串,返回字符串连接之后的结果

在Java中,String类的对象是不可变的,所以每次字符串拼接都会创建一个新的字符串对象

string s1 = "hello";
string s2 = "world";
string s3 = s1 + " " + s2; // 对字符串进行连接,拼接之后的字符串是"hello world", 中间加了空格
  • 字符串长度

使用 length() 方法来获取字符串的长度

int len = s1.length(); // 字符串的长度即字符串中字符的个数,"hello"的长度为5
  • 字符串比较

使用 equals() 方法来比较两个字符串的内容是否相等

  • 字符串索引

字符串中的字符可以通过索引访问,索引从 0 开始。

char c1 = s1.charAt(0);
  • 字符串切割和拆分:

可以使用 split() 方法将一个字符串根据指定的分隔符拆分成字符串数组。

String[] parts = s3.split(" ") // 会将字符串根据空格拆分为多个部分
  • 字符串格式化:

Java 提供了多种方式来格式化字符串,例如,使用 String.format() 方法或 printf() 方法。

  • 字符串查找和替换:

可以使用 indexOf() 方法来查找字符串中某个子串的位置,还可以使用 replace() 方法来替换字符串中的部分内容。

在Java中,想要读取下一行字符串可以使用nextLine() 方法, 这个方法会等待用户输入一行文本,并将整行文本作为字符串返回。

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        // 创建一个 Scanner 对象,并将标准输入(键盘输入)作为输入源
        Scanner scanner = new Scanner(System.in);

        // 使用 nextLine() 方法读取下一行字符串,并将其存储在变量中
        String inputLine = scanner.nextLine();

        // 关闭 Scanner 对象,释放资源
        scanner.close();
    }
}

StringBuilder

StringBuilder 也用于处理字符串,但为什么要使用StringBuilder而不是String?

这是因为如果你使用 String 进行字符串拼接,每次拼接都会创建一个新的字符串对象,这会产生大量的临时对象,会影响性能。而使用 StringBuilder 可以避免这个问题,StringBuilder 是可变的,它允许你在不创建新的字符串对象的情况下进行字符串的连接和修改,不会创建大量的临时对象,因此更高效。

StringBuilder对象的打印: 

StringBuilder sb = new StringBuilder("Hello");
System.out.println(sb.toString());
  1. 追加内容append() 方法可以用来将指定的数据类型(如 String, int, char 等)追加到序列的末尾。

    StringBuilder sb = new StringBuilder("Hello");
    sb.append(" World"); // 结果为 "Hello World"
  2. 插入内容insert() 方法可以在指定的位置插入数据。

    StringBuilder sb = new StringBuilder("World");
    sb.insert(0, "Hello "); // 结果为 "Hello World"
  3. 删除内容

    • delete(int start, int end) 删除从索引 start 到 end-1 的字符。
    • deleteCharAt(int index) 删除指定位置的字符。
    StringBuilder sb = new StringBuilder("Hello World");
    sb.delete(5, 6); // 删除空格,结果为 "HelloWorld"
    sb.deleteCharAt(0); // 删除'H',结果为 "elloWorld"
  4. 替换内容replace(int start, int end, String str) 用新的字符串替换从 startend-1 范围内的子串。

    StringBuilder sb = new StringBuilder("Hello World");
    sb.replace(6, 11, "Java"); // 结果为 "Hello Java"
  5. 反转字符串reverse() 方法会将整个字符序列进行反转。

    StringBuilder sb = new StringBuilder("Hello");
    sb.reverse(); // 结果为 "olleH"
  6. 获取长度length() 返回当前字符序列的长度。

    StringBuilder sb = new StringBuilder("Hello");
    int length = sb.length(); // 长度为 5
  7. 获取容量capacity() 返回当前分配给字符序列的总空间,包括已使用的和未使用的部分。

    StringBuilder sb = new StringBuilder();
    int capacity = sb.capacity(); // 默认初始容量通常是 16
  8. 转换为字符串toString()StringBuilderStringBuffer 对象转换为一个不可变的 String 对象。

    StringBuilder sb = new StringBuilder("Hello");
    String str = sb.toString(); // 结果为 "Hello"
  9. 设置字符setCharAt(int index, char ch) 可以修改指定索引处的字符。

    StringBuilder sb = new StringBuilder("Hello");
    sb.setCharAt(1, 'a'); // 结果为 "Hallo"
  10. 截取子串:虽然 StringBuilderStringBuffer 没有直接提供 substring() 方法,但是可以通过先调用 toString() 再使用 String 类的 substring() 方法来实现。

 

字符的大小写转换

  • toUpperCase(): 将小写字母转换成大写形式
  • toLowerCase(): 将大写字母转换成小写形式
char a = 'a'; // 小写字符 'a'
char uppercaseChar = Character.toUpperCase(a); // 大写字符 'A'
char lowercaseChar = Character.toLowerCase('A'); // 将 大写字符 'A' 转换为小写字符

trim()

 对字符串使用 trim() 方法去除字符串两端(首尾两端)的空格

 String line = sc.nextLine().trim(); 

7. 平均绩点

题目描述

每门课的成绩分为A、B、C、D、F五个等级,为了计算平均绩点,规定A、B、C、D、F分别代表4分、3分、2分、1分、0分。

输入描述

有多组测试样例。每组输入数据占一行,由一个或多个大写字母组成,字母之间由空格分隔。

输出描述

每组输出结果占一行。如果输入的大写字母都在集合{A,B,C,D,F}中,则输出对应的平均绩点,结果保留两位小数。否则,输出“Unknown”。

输入示例
A B C D F
B F F C C A
D C E F
输出示例
2.00
1.83
Unknown

import java.util.*;

public class Main{
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		while(sc.hasNextLine()) {
			int flag = 0;
			double sum = 0;
			String line = sc.nextLine();
			String grades[] = line.split(" ");
			for(int i = 0;i < grades.length;i++) {
				String x = grades[i];
				if(x.equals("A")) sum += 4;
				else if(x.equals("B")) sum += 3;
				else if(x.equals("C")) sum += 2;
				else if(x.equals("D")) sum += 1;
				else if(x.equals("F"));
				else{flag = 1;break;}
			}
			if(flag == 1) {
				System.out.println("Unknown");
			}
			else {
				System.out.printf("%.2f\n", sum/grades.length);
			}
		}
		
	}
}

14. 句子缩写

题目描述

输出一个词组中每个单词的首字母的大写组合。

输入描述

输入的第一行是一个整数n,表示一共有n组测试数据。(输入只有一个n,没有多组n的输入)
接下来有n行,每组测试数据占一行,每行有一个词组,每个词组由一个或多个单词组成;每组的单词个数不超过10个,每个单词有一个或多个大写或小写字母组成;
单词长度不超过10,由一个或多个空格分隔这些单词。

输出描述

请为每组测试数据输出规定的缩写,每组输出占一行。

输入示例
1
ad dfa     fgs
输出示例
ADF
提示信息

注意:单词之间可能有多个空格

import java.util.*;

public class Main{
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		sc.nextLine();
		
		while(n-->0) {
			
			String line = sc.nextLine().trim();
			char[] arr = line.toCharArray();
			StringBuilder sb = new StringBuilder();
			for(int i = 0;i<arr.length; ) {
				if(arr[i]>='a'&&arr[i]<='z') {
					arr[i] = Character.toUpperCase(arr[i]);
				}
				sb.append(arr[i]);
				while(i < arr.length && arr[i]!=' ') {
					i++;
				}
				while(i < arr.length && arr[i]==' ') {
					i++;
				}
			}
			System.out.println(sb.toString());
		}
	}
}

16. 位置互换

题目描述

给定一个长度为偶数位的字符串,请编程实现字符串的奇偶位互换。

输入描述

输入包含多组测试数据。
输入的第一行是一个整数n,表示有测试数据。(整个输入中,只有一个n)
接下来是n组测试数据,保证串长为偶数位(串长<=50)。

输出描述

请为每组测试数据输出奇偶位互换后的结果,每组输出占一行。

输入示例
2
0aa0
bb00
输出示例
a00a
bb00

import java.util.*;

public class Main{
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		sc.nextLine();
		while(n-->0) {
			String line = sc.nextLine();
			char[] arr = line.toCharArray();
			for(int i = 0;i < arr.length-1;i += 2) {
				swap(arr,i,i+1);
			}
			System.out.println(new String(arr));
		}
		sc.close();
	}
	private static void swap(char[] arr,int i,int j) {
		char temp = arr[i];
		arr[i] = arr[j];
		arr[j] = temp;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值