卡码网Java基础课 | 10. 平均绩点,11. 句子缩写,12. 位置互换

2024-01-10 12:53:48

String

声明和初始化

String name = "Hello, Java";
//or
String message = new String("Hello");

操作

  • Java 支持使用 + 运算符来连接字符串,返回字符串连接之后的结果,在Java中,String类的对象是不可变的,所以每次字符串拼接都会创建一个新的字符串对象;
  • 使用 string.length() 方法来获取字符串的长度;
  • 使用 equals() 方法来比较两个字符串的内容是否相等;
  • 不可以写==,没有用。
String s1 = "abc"; // s1指向的内存中只有一个对象abc。
String s2 = new String("abc"); // s2指向的内容中有两个对象abc、new 。
System.out.println(s1==s2);//false
System.out.println(s1.equals(s2));//true 字符串中equals比较的是字符串内容是否相同。
  • 字符串中的字符可以通过索引string.charAt(i)访问,索引从 0 开始;
  • 可以使用string.split(" ")方法将一个字符串根据指定的分隔符拆分成字符串数组;
  • 可以使用 indexOf() 方法来查找字符串中某个子串的位置,还可以使用 replace() 方法来替换字符串中的部分内容;
  • 在Java中,想要读取下一行字符串可以使用nextLine() 方法, 这个方法会等待用户输入一行文本,并将整行文本作为字符串返回。
  • String substring(int start,int end); 获得子串

平均绩点

  • System.out.printf("%.2f\n", res/scores.length); res/scores.length一定要是浮点型的,不然没法print。
import java.util.*;

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

char和String

char是字符类型, String是字符串类型,包含 String字符串是用来包含字符串的, char是用来包含单字符的。

字符大小的比较

每个字符都有一个唯一的 ASCII 编码值,表示它在 ASCII 字符集中的位置。在比较字符大小时,实际上是比较它们的 ASCII 编码值。

字符串是由一个个字符组合而成的, 比如字符串"hello", 是由字符(char)类型’h’、‘e’、‘l’、‘l’、'0’组成的,我们可以通过charAt(index)方法来访问每一个字符。

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

也可以用编码转成字符,(char) (uppercaseChar + 32),将大写字符的值加上32,得到对应的小写字母,并使用强制类型转换 来确保结果是字符类型。

char uppercaseChar = 'A';
char lowercaseChar = (char) (uppercaseChar + 32);

ASCII码和Unicode 码

  • ASCII码是一个比较早的、简单的字符编码标准,仅仅包含128个不同的字符,主要是一些基本的拉丁字母、数字、标点符号和回车、换行等,每个字符都有一个唯一的整数数值与之对应。
  • 而 Unicode 码是一个更为广泛的字符编码标准,它包含了世界上几乎所有已知的字符、符号和文字,常见的Unicode编码包括UTF-8、UTF-16和UTF-32,它们使用不同数量的字节来表示字符。

StringBuilder和String

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

构造方法和长度定义

StringBuilder sb = new StringBuilder();
sb.length()

也可以直接写入

StringBuilder sB1 = new StringBuilder("str");    

添加和反转

StringBuilder sb1 = new StringBuilder();
sb1.append(4);
sb1.append("123",1,2); //从下标1开始,下标2结束,插入一个,不包括下标2

sb1.reverse();

String和StringBuilder的相互转换

StringBuilder转String

StringBuilder sb2 = new StringBuilder("str");
String str1 = sB2.toString();  //StringBuilder转string

判断数据类型可用

System.out.println(sb2.getClass()); //判断变量类型
System.out.println(str1.getClass()); //判断变量类型

String转StringBuilder

String s = "hello world";
StringBuilder sb3 = new StringBuilder(s);

句子缩写

用while跳过非首字母以及空格部分。

import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNextInt()){
            int n = sc.nextInt();
            sc.nextLine();
            for (int i=0;i<n;i++) {
                String s = sc.nextLine().trim();
                char[] arr = s.toCharArray(); 
                StringBuilder sb = new StringBuilder();
                int j = 0;
                while (j<arr.length) {
                    //判断首字母是大写的还是小写的
                    //如果是大写的直接进去,小写的转大写
                    if (arr[j]<='z' && arr[j]>='a') {
                        arr[j] = Character.toUpperCase(arr[j]);
                    }
                    sb.append(arr[j]);
                    while (j<arr.length && arr[j] != ' ') {
                        j++;
                    }
                    while (j<arr.length && arr[j] == ' ') {
                        j++;
                    }
                }
                System.out.println(sb.toString());
            }
        }
    }
}

位置互换

import java.util.*;

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

还可以写一个函数在里面。

import java.util.*;

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

文章来源:https://blog.csdn.net/zszq111/article/details/135486952
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。