1.无处不在的字符串

1)生活中的字符串

2)使用String对象存储字符串

String s = "Hello World";
String s = new String("Hello World");
String s = new String();

3)String类位于java.lang包中,具有丰富的方法

计算字符串的长度、比较字符串、连接字符串、提取字符串

2.length()方法确定字符串长度

方法原型:

public int length(){

}

调用方法:

字符串标识符.length();

 

举例:长度

import java.util.Scanner;
public class StringDemo {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("请输入用户名");
String uname=input.next();
System.out.println("请输入密码");
String pwd=input.next();
 
//String 类中 length() 方法
//数组求长度length无括号 int[] arr=new intr[5]; arr.length
if (pwd.length()<6) {
System.out.println("对不起,密码长度不可以小于6位");
}else{
System.out.println("注册成功");
}
}
}

心得:数组长度与字符串长度的区别

3.字符串比较

String类提供了equals( )方法,比较存储在两个字符串对象的内容是否一致

举例:

import java.util.Scanner;
public class StringDemo2 {
public static void main(String[] args) {
String uname="admin";
String upwd="admin";
Scanner input=new Scanner(System.in);
System.out.println("请输入用户名");
String name=input.next();
System.out.println("请输入密码");
String pwd=input.next();
//equals
if (name.equals(uname)&&pwd.equals(upwd)) {
System.out.println("登陆成功!");
}else{
System.out.println("对不起,用户名或者密码错误,请重新输入!");
}
}
}

心得:

数据库中的密码:String uname="admin";   String upwd="admin";

手动输入的密码:

请输入用户名");

           String name=input.next();

请输入密码");

           String pwd=input.next();

必须保证手动输的用户名和密码与数据库的密码一致才可以登陆成功

4.String构造方法/初始化方法

举例:

public class demo1 {
public static void main(String[] args) {
 
/*==比较内容存的地址*/
String s1="aaa";
String s2=new String("aaa");
String s3=s2;
System.out.println(s1==s2);
System.out.println(s2==s3);
System.out.println(s3==s1);
System.out.println("*************");
 
/*equals比较里面的内容*/
System.out.println(s1.equals("s2"));
System.out.println(s2.equals("s3"));
System.out.println(s3.equals("s1"));
 
/*
形成对象池,存进对象池,下次存的时候就先进行找,有就不需要new,没有就new
 *
占空间
 * */
System.out.println("*************");
String s4="abc";
String s5="abc";
String s6="abc";
System.out.println(s4==s5);
System.out.println(s4==s6);
System.out.println(s5==s6);
 
    / *
占空间
 * */
System.out.println("*************");
String s7=new String("abc");
String s8=new String("abc");
String s9=new String("abc");
System.out.println(s7==s8);
System.out.println(s7==s9);
System.out.println(s8==s9);
}
}

5.”==”和equals()有什么区别呢?

equals():检查组成字符串内容的字符是否完全一致

==:判断两个字符串在内存中的首地址,即判断是否是同一个字符串对象(比较的是俩个字符串引用堆内存的地址是否相同)

练习:字符串比较-忽略大小写

public class StringDemo4 {
public static void main(String[] args) {
//
//  1-equalsIgnoreCase   忽略大小写
//  2-toUpperCase        小写转大写
//  3-toLowerCase        大写转小写
//
String s1="ABCDEFaaaa";
System.out.println(s1.toUpperCase());
System.out.println(s1.toLowerCase());
}
}

练习:去掉空格

public class StringDemo5 {
public static void main(String[] args) {
 
// trim  去掉空格
String s1="  abcd  ";
 
//去掉之前
System.out.println(s1);
System.out.println(s1.length());
 
//去掉之后
System.out.println(s1.trim());
System.out.println(s1.trim().length());
}
}

练习:实现会员注册

import java.util.Scanner;
public class StringDemo6_lx {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("欢迎进入注册系统");
boolean isOK=true;
while(isOK){
请输入用户名");
    String name=input.next();
请输入密码");
    String pwd=input.next();
请再次输入密码");
String pwd2=input.next();
if (pwd.length()<6||name.length()<3||pwd2.length()<6) {
System.out.println("用户名长度不能小于3,密码长度不可以小于6!");
}else if(!pwd.equals(pwd2)){
System.out.println("2次输入的密码不相同!");
}else{
System.out.println("注册成功!请牢记用户名和密码。");
isOK=false;
}
}
}
}

6.字符串连接

方法1:使用“+”

举例:

int sqlScore = 80; //sql成绩

int javaScore = 90; //java成绩

double htmlScore = 86.7; //html成绩

String scoreSheet = "SQL:" + sqlScore + " Java:" + javaScore + " HTML:" + htmlScore;

方法2:使用String类的concat()方法

举例:A.concat(B):    B字符串将被连接到A字符串后面

String s = new String("你好,");

String name = new String("张三!");

String sentence = s.concat(name);

System.out.println(sentence);

7.字符串常用提取方法

搜索字符串

public int indexOf(int ch)          搜索第一个出现的字符(或字符串value)

public int indexOf(String value) ch

public int lastIndexOf(int ch)       搜索最后一个出现的字符ch(或字符串value)

public int lastIndexOf(String value)

分别是第一次出现的位置和最后出现的位置

indexOf返回出现第一个匹配的位置如果没有找到字符或字符串,则返回-1

 

截取字符串

public String substring(int index) 提取从位置索引开始的字符串部分

public String substring(int beginindex, intendindex)   

提取beginindex和endindex之间的字符串部分(不包括endindex)

public String trim()       返回一个前后不含任何空格的调用字符串的副本

举例:使用indexof判断.java文件名是否正确

判断.java文件名是否正确

方法一:

import java.util.Scanner;
public class StringDemo7 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
//注册邮箱
System.out.println("**************");
System.out.println("请输入您的邮箱");
String email=input.next();
int a=email.indexOf("@");
int b=email.indexOf(".");
System.out.println("a="+a);
System.out.println("b="+b);
if ((a==-1)||(b==-1)||(a>b)) {
System.out.println("对不起,邮箱格式不正确!");
}else{
System.out.println("success");
}
}
}

方法二:

import java.util.Scanner;
public class StringDemo7 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
//注册邮箱
System.out.println("**************");
System.out.println("请输入您的邮箱");
String email=input.next();
if((email.indexOf("@")==-1)||(email.indexOf("@")>email.indexOf("."))) {
System.out.println("对不起,邮箱格式不正确!");
}else{
System.out.println("success");
}
}
}

举例:使用substring提取字符串

案例一:提取字符串

public class StringDemo8 {
public static void main(String[] args) {
//提取字符串   [5,9)
String s1="hellojavaworld";
String s2=s1.substring(5,9);
System.out.println(s2);
}
}

案例二:判断邮箱格式是否正确

import java.util.Scanner;
public class StringDemo8_lx {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
//检测后缀java
System.out.println("欢迎进入作业提交系统");
System.out.println("请输入要提交的作业名称(格式要有java后缀)");
String file=input.next();
int dian=file.lastIndexOf(".");
String houzhui=file.substring(dian+1);
if (houzhui.equals("java")) {
System.out.println("成功");
}else{
System.out.println("出错");
}
}
}

心得:首先判断点的位置,然后截取。

为什么不选index截取遇到aa.aa.aa的情况时,所以选择lastIndexOf截取。

为什么要dian+1,因为dian之后才是要截取的。

(dian+1,endIndex);无法知道endIndex到底有几位字符,所以选择不写

8.字符串拆分

问题:一段歌词,每句都以空格“ ”结尾,请将歌词每句按行输出

分析:String类提供了split()方法,将一个字符串分割为子字符串,结果作为字符串数组返回

import java.util.Scanner;
public class StringDemo9 {
public static void main(String[] args) {
//split 拆分  切割 空格/#/*
Scanner input=new Scanner(System.in);
String str="长亭外-古道边-芳草碧连天";
System.out.println("切割之前");
System.out.println("***************");
System.out.println(str);
String[] rs=str.split("-");
System.out.println("切割之后");
System.out.println("***************");
for (int i = 0; i < rs.length; i++) {
System.out.print(rs[i]);
}
}
}

心得:可以拆分空格、下划线、-、,等等

9.StringBuffer类

StringBuffer:String增强版

对字符串频繁修改(如字符串连接)时,使用StringBuffer类可以大大提高程序执行效率

StringBuffer声明(必须new

创建空StringBuffer对象:StringBuffer sb = new StringBuffer();

创建一个变量存储字符串aaa:StringBuffer sb = new StringBuffer("aaa");

StringBuffer的使用

sb.toString(); //转化为String类型

sb.append("**"); //追加字符串

sb.insert (1, "**"); //插入字符串

举例:

public class StringDemo9_1 {
public static void main(String[] args) {
StringBuffer sb=new StringBuffer("hello");
System.out.println(sb);
//转化为String类型
String str=sb.toString();
System.out.println("tsString方法:"+str);
//append 追加字符
StringBuffer sb2=sb.append(" world");
System.out.println("追加字符:"+sb2);
//insert 插入字符
StringBuffer sb3=sb.insert(3, " ");
System.out.println("插入字符:"+sb3);
}
}

10.StringBuffer类的比较

String长度不可变

StringBuffer和StringBuilder长度可变

StringBuffer线程安全StringBuilder线程不安全

StringBuilder速度快

举例:数字每3位加一个逗号

import java.util.Scanner;
public class StringDemo9_2 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("请输入一串数字");
String cash=input.next();
StringBuffer sb=new StringBuffer(cash);
for (int i = sb.length()-3; i >0; i=i-3) {
sb.insert(i, ",");
}
System.out.println(sb.toString());
}
}

心得:首先将数字变为string类型:String cash=input.next();

将string变为StringBuffer:StringBuffer sb=new StringBuffer(cash);

      1234567   123,456,7

每隔3位加一个,而且是从后往前加,

  那么第一次就是sb.length-3;第二次就是length-6;依次类推..

练习:显示商品批发总金额

训练要点

nStringBuffer类的使用

n方法的定义和使用

需求说明

n登录验证通过后,显示批发商品信息; 输入批发商品编号和数量,以指定格式显示总金额

package lx;
import java.util.Scanner;
public class Goods {
public String[] goods={"电风扇","洗衣机","电视机","冰箱","空调机"};
public double[] price={124.23,4500,8800.9,5000.88,4456};
public String username="tom";
public String password="123";
/*
 *
登陆
展示所有商品信息
购物结算
 *
 */
public void show(){
  Scanner input=new Scanner(System.in);
  System.out.println("*******************");
欢迎进入商品批发城");
          boolean isTrue=true;
          while (isTrue) {
System.out.println("请输入您的用户名");
String uname=input.next();
System.out.println("请输入您的密码");
String upwd=input.next();
if (uname.equals(username)&&upwd.equals(password)) {
isTrue=false;
System.out.println("登录成功");
 
//显示所有商品
System.out.println("******************");
System.out.println("编号\t商品\t价格");
for (int i = 0; i < goods.length; i++) {
System.out.println((i+1)+"\t"+goods[i]+"\t"+change(price[i]));
}
购买
请输入商品编号");
             int num=input.nextInt();
请输入购买数量");
             int count=input.nextInt();
             double pay=price[num-1]*count;
您一共消费"+change(pay));
            }else {
登录失败");
}
}        
}
  /*
   *
格式化显示商品价格
   *
   */
public StringBuffer change(double d){
StringBuffer cash=new StringBuffer(String.valueOf(d));
int dian=cash.toString().lastIndexOf(".");
for(int i=cash.indexOf(".")-3;i>0;i=i-3){
 cash.insert(i,',');
 }
return cash;
}
}
package lx;
public class GoodsTest {
public static void main(String[] args) {
Goods a=new Goods();
a.show();
}
}

心得:需要2个数组存放商品和商品价格

登陆、展示商品信息、购物且结算

先将double转为string,然后将string转为 StringBuffer

建立用户、密码

实现登陆uname.equals(username)&&upwd.equals(password)

登陆成功写isTrue=false; 是为了停止循环,登陆不成功则继续循环

怎么计算价格?单价对应的是编号的下标price[num-1]