JAVA-字符串

字符串
学习目标
掌握堆内存与栈内存的数据存储
掌握equals()和==的异同
掌握常用字符串方法
堆内存与栈内存
Java把内存分成两种,一种叫做栈内存,一种叫做堆内存。
在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间,该内存空间可以立刻被另作他用。
堆内存用于存放由new创建的对象和数组。

在Java代码,常常会使用到这样的类的声明实例化:
Person per = new Person();
这其实是包含了两个步骤,声明和实例化:
Person per = null; //声明一个名为Person类的对象per
per = new Person(); // 实例化这个per对象
声明指的是创建类的对象的过程;
实例化指的是用关键词new来开辟内存空间。

它们在内存中的划分是这样的:

字符串比较
String类提供了equals( )方法,比较存储在两个字符串对象的内容是否一致。
public class Login {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String uname,pwd;
System.out.print("请输入用户名: ");
uname=input.next();
System.out.print("请输入密码: ");
pwd=input.next();
if( uname.equals(“TOM”) && pwd.equals(“1234567”) ){
System.out.print("登录成功! ");
}else{
System.out.print(“用户名或密码不匹配,登录失败!”);
}
}
}
equals()方法比较原理:

equals():检查组成字符串内容的字符是否完全一致
==:判断两个字符串在内存中的地址,即判断是否是同一个字符串对象。

例如以下代码:
public class StringDemo {
public static void main(String args[]) {
String str1 = “Hello”;
String str2 = new String(“Hello”);
String str3 = str2; // 引用传递
System.out.println(str1 == str2); // false
System.out.println(str1 == str3); // false
System.out.println(str2 == str3); // true
System.out.println(str1.equals(str2)); // true
System.out.println(str1.equals(str3)); // true
System.out.println(str2.equals(str3)); // true
}
}
上方第4行代码中,new了一个对象,用“==”比较str1和str2,返回的结果却是false;而用用“equals”比较str1和str2,返回的结果是true。
为了分析上面的代码,必须首先分析堆内存空间和栈内存空间,这一点非常重要:

“==”和equals()的区别?
==:比较的是两个字符串内存地址(堆内存)是否相等;
equals():比较的是两个字符串的内容是否相等。

常用方法
字符串连接
使用“+”连接字符串:
int sqlScore = 80; //sql成绩
int javaScore = 90; //java成绩
double htmlScore = 86.7; //html成绩
String scoreSheet = “SQL:” + sqlScore + " Java:" + javaScore + " HTML:" + htmlScore;

使用String类的concat()方法,语法:A.concat(B),B字符串将被连接到A字符串后面。
String s = new String(“你好,”);
String name = new String(“张三!”);
String sentence = s.concat(name);
System.out.println(sentence);
上述代码的输出结果为:你好,张三!

字符串查找
返回出现第一个匹配的位置,如果没有找到字符或字符串,则返回-1:
方 法
说 明

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

public int indexOf(String value)

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

public int lastIndexOf(String value)

截取字符串:
方 法
说 明

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

public String substring(int beginindex, int endindex)
截取beginindex和endindex之间的字符串部分

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

substring(int beginindex, int endindex):截取beginindex和endindex之间的字符串部分,包括位置beginindex但不包括位置endindex。

示例:检查文件和邮箱格式。
import java.util.*;

public class Verify{
public static void main(String[] args) {
// 声明变量
boolean fileCorrect = false; //标识文件名是否正确
boolean emailCorrect = false; //标识E-mail是否正确
System.out.print("—欢迎进入作业提交系统—");
Scanner input = new Scanner(System.in);
System.out.println("请输入Java文件名: ");
String fileName = input.next();
System.out.print(“请输入你的邮箱:”);
String email = input.next();

    //检查Java文件名
    int index = fileName.lastIndexOf(".");  //"."的位置
    if(index!=-1 && index!=0 && 
        fileName.substring(index+1, 
        fileName.length()).equals("java")){
        fileCorrect = true;   	//标识文件名正确
    }else{
        System.out.println("文件名无效。");
    }        
    //检查你的邮箱格式
    if(email.indexOf('@')!=-1 &&
        email.indexOf('.')>email.indexOf('@')){  
        emailCorrect = true;   	//标识E-mail正确
    }else{
        System.out.println("E-mail无效。");
    }        
    //输出检测结果
    if(fileCorrect && emailCorrect){
        System.out.println("作业提交成功!");
    }else{
        System.out.println("作业提交失败!");
    }
}

}

字符串分割
String类提供了split()方法,将一个字符串分割为子字符串,结果作为字符串数组返回。
例如,将一行歌词按空格进行拆分成多行输出:
public class Lyric {
/**
* 拆分歌词
*/
public static void main(String[] args) {
String words=“长亭外 古道边 芳草碧连天 晚风扶 柳笛声残 夕阳山外山”;
String[] printword=new String[100];//接收数组

	System.out.println("***原歌词格式***\n"+words);
	System.out.println("\n***拆分后歌词格式***");
	printword=words.split(" ");//按照空格进行拆分
	for(int i=0;i<printword.length;i++){
		System.out.println(printword[i]);//打印输出
	}
}

}

StringBuffer类
对字符串频繁修改(如字符串连接)时,使用StringBuffer类可以大大提高程序执行效率。
StringBuffer的声明:
//创建空StringBuffer对象:
StringBuffer sb = new StringBuffer();
//创建一个变量存储字符串aaa:
StringBuffer sb = new StringBuffer(“aaa”);
StringBuffer的使用:
sb.append(""); //追加字符串
sb.insert (1, "
"); //插入字符串
sb.toString(); //转化为String类型

示例如下:
public class sbAppend {
public static void main(String[ ] args) {
StringBuffer sb = new StringBuffer(“青春无悔”);
int num=110;
StringBuffer sb1 = sb.append(“我心永恒”);
System.out.println(sb1);
StringBuffer sb2 = sb1.append(‘啊’);
System.out.println(sb2);
StringBuffer sb3 = sb2.append(num);
System.out.println(sb3);
}
}

其它方法
charAt() : 返回字符串中某个特定位置的字符
indexOf() :返回字符串中某个特定字符或子字符串首次出现的索引
toUpperCase() : 将字符串内的所有字符从小写改为大写
toLowerCase() : 将字符串内的所有字符从大写改为小写

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值