Java基础语法七(例题2)

String的操作

基础操作

String类的构造方法很多。可以通过初始化一个字符串,或者字符数组,或者字节数组等等来创建一个String对象

常见方法

1、length()
2、substring(int)/(int,int)
3、charAt(int index):char
4、indexOf(int ch) indexOf(int ch, int fromIndex) 方法
5、equals(String):boolean 比较两个字符串的内容是否相等
6、split(String regex)指定分割
package com.yan1;

public class Test2 {

	public static void main(String[] args) {
		String s1 = "问到了jzkjcadxk";
		System.out.println(s1.length()); // 获取字符个数,不区分中英文
		System.out.println(s1.charAt(0)); // 获取指定下标位置上的字符
		for (int i = 0; i < s1.length(); i++) {
			char cc = s1.charAt(i);
			System.out.println(cc + "----" + (int) cc);
		}
	}

}
package com.yan2;

public class Test1 {

	public static void main(String[] args) {
		String ss = "TODO Auto-generated method stub";

		// 获取字符串中的一部分内容
		String tmp = ss.substring(2);
		System.out.println(tmp);

		tmp = ss.substring(2, 8);
		System.out.println(tmp);

//		tmp = ss.substring(2, 100);
//		System.out.println(tmp);//语法错误

	}

}
package com.yan2;

public class Test2 {
	public static void main(String[] args) {
		String ss = "TODO Auto-generated menethod steneub";
		int pos = ss.indexOf("ene"); // 从原始串中查找ene第一次出现的下标位置
		System.out.println(pos);

		pos = ss.indexOf("ene", pos + 1); // 查找下一个
		System.out.println(pos);

		pos = ss.lastIndexOf("ene"); // 从后向前找
		System.out.println(pos);

		pos = ss.indexOf("abc");
		System.out.println(pos); // 如果查找不到则返回-1
	}
}
package com.yan2;

public class Test5 {
	public static void main(String[] args) {
		String ss = "TODO Auto-generated menethod steneub";
		String[] arr = ss.split("ene");// 指定分割
		for (String temp : arr) {
			System.out.println(temp);
		}
//		System.out.println(Arrays.toString(arr));
	}
}

字符串常量拼接,在方法区的常量池中完成

String类型的拼接是通过StringBuilder类中的append方法实现的,然后返回toString的结果。是在堆中的新对象

字符串转数字

使用Scanner读取键盘录入数据

next():String 当光标扫描到第一个分隔符(默认是空格)停止扫描,会创建一个 String 类的对象,里面存储的就是扫描的内容(不包含空格分隔符)返回创建的String 对象的引用给 n
nextLine(): 读取输入,包括单词之间的空格和除回车以外的所有符号 ( 即。它读到行尾 ) 。读取输入
后, nextLine() 将光标定位在下一行。所以它和 next() 的区别就是它没有分隔符,直接扫描全部的键
盘输入内容,并创建对象进行将其引用返回
目标类型名 .parse 类型 (String)
Integer.parsetInt(String):int
Double.parsetDouble(String):double
public class Test1{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        int kk=1;
        String ss=sc.nextLine();
        kk=Integer.parseInt(ss);


    }
}

数字转字符串

""+任意类型数据

字符串新方法

String.repeat(int) 根据 int 参数的值重复 String
String.lines() 拆分由其行终止符在其上调用的 String ,并返回由这些行终止符划分的
String.strip() String.stripLeading() String.stripTrailing() 去除字符串的空格
String.isBlank() 判断 String 是否为空或仅包含空格字符

具体实现原理

JDK1.8 以前采用 char[] 实现,现在采用 byte[] 的方式实现。可以减少字符串占用的内存,同时减少垃圾回收次数。
实际开发中单字节的字符使用频率远高于双字节的。在 JDK8+ 版本中 Java 会根据字符串内容自动设置为相应的编码,要么 Latin-1 要么 UTF16 ,中文是两个字节,纯英文是一个字节。
不使用 UTF-8 编码字符集是因为 UTF-8 是变长编码的,有 1 2 3 4 字节的不同情况,所以对于 String 随机访问操作很不方便
UTF-16 也是变长编码,是使用 2 或者 4 个字节存储字符。对于 Unicode 编码在 0-FFFF 之间的字符使用两个字节存储,而10000-10FFFF 之间的字符使用 4 个字节。但是 Java 中一个 char 就是 2 个字节,同时 String 的各种操作都是以Java 字符为单位的,所以 UTF-16 Java 中可以看作一个定长的编码

例题一:打印5位数中的所有回文数,每行打印10个数。最后统计一下一共有多少个5位回文数。

package com.yan3;

public class Test2 {

	public static void main(String[] args) {
		// 打印5位数的回文数 1234321 124421,每行打印10个,总共多少个回文数
		int ccc = 0;
		for (int k = 10000; k < 100000; k++) {
			String ss = "" + k;
			String s2 = "";
			for (int i = 0; i < ss.length(); i++) {
				char cc = ss.charAt(i);
				s2 = cc + s2;
//				s2+=cc;  //语法错误?
			}
			if (ss.equals(s2)) {
				System.out.print(k + "\t");
				ccc++;
				if (ccc % 10 == 0)
					System.out.println();
			}
		}
		System.out.println("回文数一共有" + ccc + "个");
	}
}

例题二:根据键盘录入的数值1234…7输出对应的星期一、星期二、星期三星期日

package com.yan3;

import java.util.Scanner;

public class Test3 {

	public static void main(String[] args) {
		// 根据键盘录入的数值1、2、3、4,…7输出对应的星期一、星期二、星期三…星期日
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入数字:");
		int kk = 1;
		while (true) {
			String ss = sc.nextLine();
			kk = Integer.parseInt(ss);
			if (kk < 1 || kk > 7)
				System.out.println("输入的数据不合法!");
			else
				break;
		}
		String ss = "";
		switch (kk) {
		case 1:
			ss = "星期一";
			break;
		case 2:
			ss = "星期二";
			break;
		case 3:
			ss = "星期三";
			break;
		case 4:
			ss = "星期四";
			break;
		case 5:
			ss = "星期五";
			break;
		case 6:
			ss = "星期六";
			break;
		default:
			ss = "星期天";
			break;
		}
		System.out.println(ss);

	}

}

或者也可用String类型来输出对应

package com.yan3;

import java.util.Scanner;

public class Test4 {

	public static void main(String[] args) {
		// 根据键盘录入的数值1、2、3、4,…7输出对应的星期一、星期二、星期三…星期日
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入数字:");
		int kk = 1;
		while (true) {
			String ss = sc.nextLine();
			kk = Integer.parseInt(ss);
			if (kk < 1 || kk > 7)
				System.out.println("输入的数据不合法!");
			else
				break;
		}
		String tt = "一二三四五六天";
		String ss = "星期" + tt.charAt(kk - 1);
		System.out.println(ss);
	}
}

例题三:键盘录入一个学生成绩(用int表示),自动输出该同学的成绩评级。学生的分数取值范围[0,100]

package com.yan1;

import java.util.Scanner;

public class Test4 {

	public static void main(String[] args) {
		// 3、键盘录入一个学生成绩(用int表示),自动输出该同学的成绩评级。学生的分数取值范围[0,100]
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入学生成绩:");
		int score = sc.nextInt();
		if (score < 0 || score > 100) {
			System.out.println("输入的数据不合法!");
		} else {
			if (score >= 90)
				System.out.println("优秀");
			else if (score >= 80)
				System.out.println("良好");
			else if (score >= 70)
				System.out.println("中等");
			else if (score >= 60)
				System.out.println("及格");
			else
				System.out.println("不及格");
		}
		sc.close();

	}

}

例题四:输出杨辉三角形,要求,根据键盘录入的行数,决定等腰三角形的行数。

延伸题:输出菱形,菱形空心

package com.yan1;

import java.util.Scanner;

public class Test5 {

	public static void main(String[] args) {
		// 4、输出杨辉三角形,要求,根据键盘录入的行数,决定等腰三角形的行数。
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入行数:");
		int k = sc.nextInt();
		for (int i = 1; i <= k; i++) {
			for (int j = 1; j <= k - i; j++) {
				System.out.print(" ");
			}
			for (int j = 1; j <= 2 * i - 1; j++) {
				System.out.print("*");
			}
			System.out.println();
		}
		sc.close();
	}

}
package com.yan2;

import java.util.Scanner;

public class check1 {
	public static void main(String[] args) {
		// 菱形
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入行数:");
		int k;
		while (true) {
			k = sc.nextInt();
			if (k >= 1 && k < (Integer.MAX_VALUE / 2))
				break;
			else
				System.out.println("输入的数据不合法");
		}
		for (int i = 1; i <= k; i++) {
			for (int j = 1; j <= k - i; j++)
				System.out.print(" ");
			for (int j = 1; j <= 2 * i - 1; j++)
				System.out.print("*");
			System.out.println();
		}

		for (int i = k - 1; i >= 1; i--) {
			for (int j = 1; j <= k - i; j++)
				System.out.print(" ");
			for (int j = 1; j <= 2 * i - 1; j++)
				System.out.print("*");
			System.out.println();
		}
//		System.out.println(Integer.MAX_VALUE);
	}
}
package com.yan2;

import java.util.Scanner;

public class check2 {

	public static void main(String[] args) {
		// 菱形空心
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入行号:");
		int k = sc.nextInt();
		for (int i = 1; i <= k; i++) {
			for (int j = 1; j <= k - i; j++)
				System.out.print(" ");
			System.out.print("*");
			int kk = 2 * (i - 1) - 1;
			if (kk > 0) {
				for (int j = 1; j <= kk; j++)
					System.out.print(" ");
				System.out.print("*");
			}
			System.out.println();
		}
		for (int i = k - 1; i >= 1; i--) {
			for (int j = 1; j <= k - i; j++)
				System.out.print(" ");
			System.out.print("*");
			int kk = 2 * (i - 1) - 1;
			if (kk > 0) {
				for (int j = 1; j <= kk; j++)
					System.out.print(" ");
				System.out.print("*");
			}
			System.out.println();
		}

	}

}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值