学习目标:
- Java 在大三上已经学过一学期的面向对象,所以打算在一星期把面向对象复习完成。
学习内容:
字符串
学习时间:
下午 4点-下午 6 点
学习产出:
String概述
java.lang.String类代表字符串,Java程序中的所有字符串文字(例如“abc”)都为此类的对象。
String name="全聚德一级码师";
String city="乌鲁木齐";
String的注意
字符串的内容是不会发生改变的,它的对象在创建后不能被更改。
创建String对象的两种方式
1.直接赋值
String name="全聚德一级码师";
当使用双引号直接赋值时,系统会检查该字符串在串池中是否存在。
存在:复用(节约内存)
不存在:创建新的
2.new
构造方法 | 说明 |
public String() | 创建空白字符串,不含任何内容 |
public String(String original) | 根据传入的字符串,创建字符串对象 |
public String(char[ ] chs) | 根据字符数组,创建字符串对象 |
public String(byter[ ] chs) | 根据字节数组,创建字符串对象 |
public class demo {
public static void main(String[] args) {
//空参构造
String s1=new String();
System.out.println("?"+s1+"?");
//传递一个字符串,根据传递的字符串内容再创建一个新的字符串对象(脱裤子放屁)
String s2=new String("abc");
System.out.println(s2);
//传递一个字符数组,根据字符数组的内容再创建一个新的字符串对象
//需求:我要修改字符串内容。 abc-->Qbc
//abc --> {'a','b','c'} --> {'Q','b',''c} --> Qbc
char[] chs={'a','b','c','d'};
String s3=new String(chs);
System.out.println(s3);//abcd
//传递一个字节数组,根据字节数组的内容再创建一个新的字符串对象
//应用场景:以后在网络当中传输的数据都是字节信息
//我们一般要把字节信息进行转换,转成字符串,此时就要用到这个构造了
byte[] bytes={76,79,86,69};
String s4=new String(bytes);
System.out.println(s4);
}
}
运行结果
??
abc
abcd
LOVE
Java的常用方法(比较)
int a=10;
int b=20;
System.out.println(a==b);//false
基本数据类型比较的是数据值。
String s1=new String("abc");
String s2=new String("abc");
System.out.println(s1==s2);//false
引用数据类型比较的是地址值。
1.字符串比较
boolean equals方法(要比较的字符串) 完全一样才是true,否则为false
boolean equalsignoreCase(要比较的字符串) 忽略大小写
public class demo2 {
public static void main(String[] args) {
//1.创建两个字符串对象
String s1=new String("abc");
String s2="abc";
System.out.println(s1==s2);
boolean result1=s1.equals(s2);
System.out.println(result1);
String s3="Abc";
boolean result2=s1.equalsIgnoreCase(s3);
System.out.println(result2);
}
}
运行结果:
false
true
true
import java.util.Scanner;
public class demo3 {
public static void main(String[] args) {
//假设我现在键盘输入abc
Scanner scan=new Scanner(System.in);
System.out.println("请输入一个字符串:");
//代码中定义一个字符串abc
String s1="abc";
String s2=scan.next();//abc
//用==比较,能一样吗?
System.out.println(s1==s2);
}
}
运行结果:
请输入一个字符串:
abc
false
结论:以后只要想比较字符串的内容,就要用String里面的方法。
练习:已知正确的用户名和密码,请用程序实现模拟用户登录。
总共给三次机会,登录之后,给出相应的提示。
import java.util.Scanner;
public class demo4 {
public static void main(String[] args) {
//1.定义两个变量
String username="蛋姐";
String password="123456";
int a=3;
for (int i = 0; i <3; i++) {
//键盘录入
Scanner scan = new Scanner(System.in);
System.out.println("请输入用户名:");
String uname=scan.next();
System.out.println("请输入密码:");
String upassword=scan.next();
//比较
if(username.equals(uname)&&(password.equals(upassword))){
System.out.println("登录成功!!!");
break;
}
--a;
System.out.println("密码或用户名错误,还有"+a+"次机会!!!");
}
}
}
遍历字符串
键盘录入一个 字符串,使用程序实现在控制台遍历该字符串。
public char charAt(int index): 根据索引返回字符
public int length(): 返回此字符串的长度
数组的长度:数组名。length
字符串的长度:字符串对象。length()
import java.util.Scanner;
public class demo5 {
public static void main(String[] args) {
//键盘录入一个字符串
Scanner scan=new Scanner(System.in);
System.out.println("请输入一个字符串:");
String s1=scan.next();
//经行遍历
for (int i = 0; i < s1.length(); i++) {
//i依次表示字符串的每一个索引
char c=s1.charAt(i);
System.out.println(c);
}
}
}
运行结果:
请输入一个字符串:
全聚德一级码师
全
聚
德
一
级
码
师
练习:
键盘录入一个字符串,统计字符串中大写与小写字母的个数。
import java.util.Scanner;
public class demo6 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入:");
String s1=sc.next();
int bigCount=0;
int smallCount=0;
int numberCount=0;
for (int i = 0; i < s1.length(); i++) {
char c =s1.charAt(i);
if(c>=97&&c<=122){ //acsII码
smallCount++;
}else if(c>=65&&c<=90){
bigCount++;
} else if (c>=48&&c<57) {
numberCount++;
}
}
System.out.println("小写字母的个数:"+smallCount +"大写字母的个数:"+bigCount +"数字的个数"+numberCount);
}
}
运行结果
请输入:
HelloWorld123
小写字母的个数:8大写字母的个数:2数字的个数3
ASCII码表
拼接字符串
练习:
定义一个方法,把int数组中的数据按照指定的格式拼接成一个字符串返回,调用该方法。
public class demo7 {
public static void main(String[] args) {
int[] arr={1,2,3};
System.out.println(arrToString(arr));
}
public static String arrToString(int[] arr){
if(arr==null){
return "";
}
if (arr.length==0){
return "[]";
}
String result="[";
for (int i = 0; i < arr.length; i++) {
if(i== arr.length-1){
result+=arr[i]+"]";
}else {
result+=arr[i]+",";
}
}
return result;
}
}
运行结果
[1,2,3]
练习:定义一个方法,实现字符串反转。
键盘录入一个字符串,调用该方法后,在控制台输出结果。
例如:键盘录入abc,输出cba
public class demo8 {
private static int i;
public static void main(String[] args) {
String str=new String("abc");
System.out.println(reverser(str));
}
public static String reverser(String str){
String result="";
//i依次表示字符串的每一个索引(倒着的)
for (int i = str.length()-1; i >= 0; i--) {
char c=str.charAt(i);
result+=c;
}
return result;
}
}
运行结果
cba
练习:金额转化
2135 >>>>>>> 零佰零拾零万贰仟壹佰叁拾伍元 |
import java.util.Scanner;
public class demo9 {
public static void main(String[] args) {
//键盘录入金额
Scanner scan=new Scanner(System.in);
int money;
while (true) {
System.out.println("请输入一个金额:");
money= scan.nextInt();
if(money>=0&&money<=9999999){
break;
}else {
System.out.println("金额无效!!!");
}
}
//表示大写
String moneyStr="";
//得到数字
while (true){
//从右往左获取数据
int ge=money%10;
String getCapitalNumber=getCapitalNumber(ge);
moneyStr=getCapitalNumber+moneyStr;
//去掉刚刚获取的数据
money=money/10;
if(money==0){
break;
}
}
//在前面补零
int count=7-moneyStr.length();
for (int i = 0; i < count; i++) {
moneyStr="零"+moneyStr;
}
//表示最终的结果
String moneyover="";
//定义一个数组表示单位
String[] arr={"佰","拾","万","仟","佰","拾","元"};
for (int i = arr.length-1; i >=0; i--) {
//拼接大写数字和单位
moneyover=moneyStr.charAt(i)+arr[i]+moneyover;
}
System.out.println(moneyover);
}
public static String getCapitalNumber(int number){
String[]s1={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
return s1[number];
}
}
运行结果
请输入一个金额:
123
零佰零拾零万零仟壹佰贰拾叁元