文档章节

Java学习日志(13-1-String类常见操作)

Almon
 Almon
发布于 2016/08/17 16:14
字数 1718
阅读 4
收藏 0

String类

    被final修饰,不可以被覆盖

class StringDemo{
	public static void main(String[] args){
		String s1="abc";	//s1是一个类类型变量,"abc"是一个对象
						//字符串最大的特点:一旦被初始化就不可以被改变
        String s2=new String("abc");
        System.out.println(s1==s2);//false
        System.out.println(s1.equals(s2));//true
        //String类覆写了Object类中equals方法,用于判断字符是否相同
	}
}
//s1代表一个对象,s2有2个对象

String类适用于描述字符串事物,因此提供了多个方法对字符串进行操作

获取

    字符串中包含的字符数——字符串的长度

int length();

    根据位置获取位置上的某个字符

char charAt(int index);

    根据字符获取该字符的位置

int indexOf(int ch);//返回的是ch在字符串中第一次出现的位置
int indexOf(int ch,int fromIndex);//从fromIndex指定位置开始,获取ch在字符串中出现的位置

int indexOf(String str);//返回str在字符串中第一次出现的位置
int indexOf(String str,int fromIndex);//从fromIndex指定位置开始,获取str再付串中出现的位置
前面方法加上last——lastIndexOf(int ch)即反向索引

练习

class StringMethodDemo{
	public static void method_get(){
		String str="abcdefadfg";
		//长度
		sop(str.length());
		//根据索引获取字符
		sop(str.charAt(4));//当访问到字符串中不存在的角标时,会发生越界异常
		//根据字符获取索引
		sop(str.indexOf('a',3));//如果没有找到,返回-1
		
	}
	public static void sop(Object obj){
		System.out.println(obj);
	}
	public static void main(String[] args){
		method_get();
	}
}

判断

    字符串中是否包含某一个子串

boolean contains(str);
//indexOf(str)返回值为-1时表示字符串中不存在str,因此也可用于判断
//该方法既可以返回位置,又可以用于判断

    字符串中自否有内容

boolean isEmpty();//即判断长度是否为0

    字符串是否是以指定内容开头

boolean stratsWith(str);

    字符串是否是以指定内容结尾

boolean endsWith(str);

    字符串内容是否相同

boolean equals(str);//覆写Object类的equals方法
boolean equalsIgnoreCase();//忽略大小写

练习

class StringMethodDemo{
	public static void method_is(){
		String str="ArrayDemo.java";
		sop(str.startsWith("Array"));
		sop(str.endsWith("java"));
		sop(str.contains("Demo"));
	}
	public static void sop(Object obj){
		System.out.println(obj);
	}
	public static void main(String[] args){
		method_is();
	}
}

转换

    将字符数组转换为字符串

构造函数:String(char[])
        String(char[],offset,count)//将字符数组中的一部分转成字符串
静态方法:static String copyValueOf(char[]);
        static String copyValueOf(char[],int offset,int count)
        static String valueOf(char[]);

    将字符串转换成字符数组**

char[] toCharArray();

    将字节数组转换成字符串

String(byte[]);
String(byte[],offset,count);

    将字符串转换成字节数组

byte[] getBytes();

    将基本数据类型转换成字符串

String valueOf(int);
String valueOf(double);

**字符串和字节数组在转换过程中,可以指定编码表

练习

	public static void method_trans(){
		char[] arr={'a','b','c','d','e','f'};
		String s=new String(arr,1,3);
		sop("s="+s);
		String s1="zxcvbnm";
		char[] chs=s1.toCharArray();
		for(int x=0;x<chs.length;x++){
			sop("ch="+chs[x]);
		}
	}

切割和替换

    替换

String replace(oldchar,newchar);//如果返回的字符不存在,则返回原串

    切割

String[] split(regex)

    子串:获取字符串中的一部分

String substring(begin);//从指定位置开始到结尾
String substring(begin,end);//包含头,不包含尾

练习

	//获取子串
	public static void method_sub(){
		String s="asdfghj";
		sop(s.substring(2));
		sop(s.substring(2,4));
	}
	//切割和替换
	public static void method_split(){
		String s="zhangsan,lisi,wangwu";
		String[] arr=s.split(",");
		for(int x=0;x<arr.length;x++){
			sop(arr[x]);
		}
	}
	public static void method_replace(){
		String s="hellow java";
		//String s1=s.replace('a','n');
		String s1=s.replace("java","world");
		sop("s="+s);
		sop("s1="+s1);
	}

转换,去空格,比较

    经字符串转成大/小写

String toUpperCase();
String tolowerCase();

    去除字符串两段多余空格

String trim();

    对两个字符串进行自然顺序的比较

int compareTo(string);//相等返回0,小于返回负数,大于返回正数

练习

	public static void method7(){
		String s="    Hellow Java    ";
		sop(s.toUpperCase());
		sop(s.toLowerCase());
		sop(s.trim());
		String s1="abc";
		String s2="aaa";
		sop(s1.compareTo(s2));
	}

字符串总练习

1.模拟一个trim方法,去除字符串两端的空格

/* 思路:
1.判断字符串第一个位置是否是空格,如果是继续向下判断,知道不是空格为止
2.当开始和结尾都判断到不是空格时,就是要获取的字符串 */
class StringTest{
	public static void sop(String str){
		System.out.println(str);
	}
	public static String myTrim(String str){
		int start=0,end=str.length()-1;
		while(start<=end&&str.charAt(start)==' '){
			start++;
		}
		while(start<=end&&str.charAt(end)==' '){
			end--;
		}
		return str.substring(start,end+1);
	}
	public static void main(String[] args){
		String s="    ab cd     ";
		sop("("+s+")");
		s=myTrim(s);
		sop("("+s+")");
	}
}

2.将一个字符串进行反转,将字符串中指定部分进行反转,“abcdefg”;abfedcg

    Ver1.0 全部反转

	/*思路:
	1.类似对数组的元素进行反转
	2.将字符串变成数据,对数组反转
	3.将反转后的数组变成字符串
	4,只要将未反转的部分的开始和结束位置作为参数传递即可 
	*/
	public static String reverseString(String s){
		//字符串变为数组
		char[] chs=s.toCharArray();
		//反转数组
		reverse(chs);
		//将数组变成字符串
		return new String(chs);
	}
	private static void reverse(char[] arr){
		for(int start=0,end=arr.length-1;start<end;start++,end--){
			swap(arr,start,end);
		}
	}
	private static void swap(char[] arr,int x,int y){
		char temp=arr[x];
		arr[x]=arr[y];
		arr[y]=temp;
	}

    Ver2.0 部分反转

	public static String reverseString(String s,int start,int end){
		char [] chs=s.toCharArray();
		reverse(chs,start,end);
		return new String(chs);
	}
	public static String reverseString(String s){

		return "";
	}
	private static void reverse(char[] arr,int x,int y){
		for(int start=x,end=y-1;start<end;start++,end--){
			swap(arr,start,end);
		}
	}
	private static void swap(char[] arr,int x,int y){
		char temp=arr[x];
		arr[x]=arr[y];
		arr[y]=temp;
	}

    Ver3.0 整合代码

	public static String reverseString(String s,int start,int end){
		char [] chs=s.toCharArray();
		reverse(chs,start,end);
		return new String(chs);
	}
	public static String reverseString(String s){
		return reverseString(s,0,s.length());
	}
	private static void reverse(char[] arr,int x,int y){
		for(int start=x,end=y-1;start<end;start++,end--){
			swap(arr,start,end);
		}
	}
	private static void swap(char[] arr,int x,int y){
		char temp=arr[x];
		arr[x]=arr[y];
		arr[y]=temp;
	}

3.获取一个字符串在另一个字符串中出现的次数

    方法一

	/* 思路:
	1.定义个计数器
	2.获取kk第一次出现的位置
	3.从第一次出现位置后剩余字符串中继续获取
	4.当不再获取时,定义完成
	*/
	public static int getSubCount(String str,String key){
		int count=0;
		int index=0;
		while((index=str.indexOf(key))!=-1){
			sop("str="+str);
			str=str.substring(index+key.length());
			count++;
		}
		return count;
	}

    方法二

	public static int getSubCount2(String str,String key){
		int count=0;
		int index=0;
		while((index=str.indexOf(key,index))!=-1){
			sop("index="+index);
			index=index+key.length();
			count++;
		}
		return count;
	}

4.获取两个字符串中最大相同子串

/*思路:
	1.讲短的串按照长度递减的方式获取到
	2.将每获取到的字串去长传中判断是否包含
		如果包含,已经找到
	*/
	public static String  getMaxSubString(String s1,String s2){
		String max="",min="";
		max=(s1.length()>s2.length())?s1:s2;
		min=max==s1?s2:s1;
		sop("max="+max+"...min="+min);
		for(int x=0;x<min.length();x++){
			for(int y=0,z=min.length()-x;z!=s2.length()+1;y++,z++){
				String temp=min.substring(y,z);
				// sop(temp);
				if(max.contains(temp)){
					return(temp);
				}
			}
		}
		return null;
	}

 

© 著作权归作者所有

共有 人打赏支持
Almon
粉丝 2
博文 64
码字总数 44346
作品 0
江北
私信 提问
java编程学习常见面试题及答案

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

Java小辰
05/22
0
0
淘宝Tprofiler工具实现分析

项目首页:https://github.com/alibaba/TProfiler 工具介绍 TProfiler是一个可以在生产环境长期使用的性能分析工具.它同时支持剖析和采样两种方式,记录方法执行的时间和次数,生成方法热点 对...

伍咖
2015/11/14
0
0
Java语言学习(七):字符串的常见使用

Java中字符串的使用很是常见,也是不可避免的,比如:格式化、大小写转换等等,下面就这些常见的使用来说下字符串。 在使用前,必须要理解一点:字符串是不可变的对象,意味着每当调用字符串...

海岸线的曙光
07/16
0
0
使用javap分析return和finally的执行字节码

常见指令: 1、putstatic #5; --putstatic当栈顶元素出栈放到常量解析池中的#5位置 2、iconst1 --int常量1放入操作数栈 3、aload0 --将局部变量0位置对象取出来,压入栈push 4、invokespecial...

墙头草
2011/09/16
0
0
Groovy轻松入门——通过与Java的比较,迅速掌握Groovy

Groovy和Java的相同点有: 3+, 4+, 6+, 8+, 10+, 12+, 13, 14, 15, 18+, 20+, 21, 22, 23, 28+, 29+, 30+, 31+, 32+ +表示Groovy不但涵盖了Java的语法,而且还有增强部分。 Groovy和Java的不...

DavidBao
2015/05/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

缓存

并发情况下发生的缓存问题: 缓存一致性: 缓存穿透:是指在高并发场景下,如果某一个key被高并发的访问,缓存没有命中,出于容错性的考虑,会去数据库获取数据,从而导致大量请求访问数据库...

wuyiyi
10分钟前
1
0
eclipse 和idea 快捷键对照

分类 功能点 Eclipse快捷键 IDEA快捷键 搜索 搜索文本 Ctrl + F Ctrl + F Ctrl + R 查找替换 Alt + P/A 逐个/全部替换 Alt + F3 查找当前选中词 继续搜索 Ctrl + K 向前 Ctrl + Shift + K 向...

郭恩洲_OSC博客
11分钟前
2
0
PowerHA IP 替换方式与IP 别名方式的区别

IPAT via replacement (IP替换) The service IP label replaces the boot IP address on the interface. The heartbeat IP alias address remains. IPAT via aliasing (IP别名) The servic......

突突突酱
15分钟前
2
0
Kafka 几个重要的配置总结

注意:配置基于Kafka 0.8.2.1 broker配置 #非负整数,用于唯一标识broker broker.id 0 #kafka持久化数据存储的路径,可以指定多个,以逗号分隔 log.dirs /tmp/kafka-logs #broker接收连接请求...

hblt-j
16分钟前
2
0
开发函数计算的正确姿势 —— 排查超时问题

写不尽的 code,查不完的 bug 通常我们写 bug,哦,不对,写代码时总不会一帆风顺,往往各种 bug 充斥其中,即使测试有较高的代码覆盖率往往也会有漏网之鱼。能写出一些比较隐蔽或者看起来像...

阿里云官方博客
20分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部