首页 > 其他分享 >4 字符串

4 字符串

时间:2022-12-04 16:00:26浏览次数:37  
标签:String StringBuilder System str 字符串 out

Head First Java 和 AcWing Java课程做的总结4。

计算机中只有0/1,会有字符是因为将特定的0/1序列转换为字符。

4.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
0 —— 48
A —— 65
a —— 97
常用ASCII值:'A'- 'Z'是65 ~ 90,'a' - 'z'是97 - 122,0 - 9是 48 - 57。

可以去网上找ASCII表,很常见。

字符可以参与运算,运算时会将其当做整数:

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);
    }
}

4.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
//Integer.praseInt()

int money = 123;
String money_str = "" + 123;

//或者
Integer money = 123;
String money_str = money.toString(0)

只读变量,不能修改,例如:

(如果用 + ,则会生成一个新的字符串对象,与之前的字符串对象不同)

String a = "Hello ";
a += "World";  // 会构造一个新的字符串
//与原来的Hello不在同一个地方

访问 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():将字符串转化成字符数组

//上述API都不改变原串的值

4.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.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():翻转字符串
  • toString():转换成String
  • append(String str):添加字符串

StringBuilderString 相互转换

  • StringBuilder转换为String:public String toString(): 通过toString() 就可以实现把StringBuilder 转换为String

  • String转换为StringBuilder:public StringBuilder(String s):通过构造方法就可以实现把String转换为StringBuilder

  • //StringBuilder -> String
    StringBuilder sb1 = new StringBuilder();
    sb1.append("hello");
    String s = sb1.toString();
    System.out.println(s);
    
    //String -> StringBuilder
    String ss = "hello";
    StringBuilder sb2 = new StringBuilder(s);
    System.out.println(sb2);
    

标签:String,StringBuilder,System,str,字符串,out
From: https://www.cnblogs.com/whxky/p/16950019.html

相关文章

  • C#11:原始字符串
    这一直以来是我写代码的一个痛点,C#11终于解决了,那就是我想把一个整齐的格式的json字符串转出,但不能如愿,要不用一个三方库来搞定,要不就加各种双引号,如果有变量还得小心......
  • C#11:原始字符串
    这一直以来是我写代码的一个痛点,C#11终于解决了,那就是我想把一个整齐的格式的json字符串转出,但不能如愿,要不用一个三方库来搞定,要不就加各种双引号,如果有变量还得小心......
  • java中的字符串数组
    本文主要讲述java中的字符串数组字符串数组的声明有如下几种形式://第一种方式:new//注意在String的后面[]中不需要添加字符串数组的长度。否则报错。String[]arr_1......
  • 把数字翻译字符串
      importjava.util.*;publicclassSolution{/***解码*@paramnumsstring字符串数字串*@returnint整型*/publicintsolve(Stringnums......
  • C 字符串指针与字符串数组
    在程序中定义的字符串无论是对于字符串指针还是字符串数组,都会将字符串放到静态存储区在程序开始运行的时候,对于数组来说,先分配内存空间,然后静态存储区中的字符串字面量......
  • 字符串的读入与输出
    一、\(scanf\)函数使用1、不带空格的字符串#include<cstring>#include<cstdio>usingnamespacestd;intmain(){chara[110];scanf("%s",a);printf("%......
  • 字符串-00003-堆上字符串-测试代码
    main.c头文件请参考:https://www.cnblogs.com/kxwslmsps/p/16949213.html实现文件myString.c请参考:https://www.cnblogs.com/kxwslmsps/p/16949223.html#include"myS......
  • 字符串-00002-堆上字符串-函数实现
    myString.c,常用函数的实现头文件定义请参考:https://www.cnblogs.com/kxwslmsps/p/16949213.html#include"myString.h"/*****************************************......
  • Leetcode 1796 寻找字符串中第二大的数字
    Leetcode1796寻找字符串中第二大的数字1、两次遍历(省略)2、一次遍历(max和second变量,代码省略)3、范围0-9,桶排序(代码如下)classSolution{public:intsecondHig......
  • ( Java 和 C++ 还是有差别)卑微地向API低下了头,但是反转字符串的单词依旧写了很久 学
    344.反转字符串-ezclassSolution{publicvoidreverseString(char[]s){intleft=0,right=s.length-1;chartmp;while(l......