java学习笔记(第五章)

很久以前有个同学问了我一道很简单的问题:输入一个整数,输出它的数位和各个位上的数之和,上来一想用while循环会比较好做,但是用c++的string 会更加方便,学了java以后心血来潮想试试java的string类 发现java和c++有一些区别:
//使用charAt函数把字符串第i-1项变成字符,从而可以-'0'计算各个位的位数
package practice;
import java.util.*;
public class 第五章
{
	public static void main(String[] args)
	{
		Scanner in= new Scanner(System.in);
		String num;
		num=in.next();
		int ans=0;
		int ws=0;
		int zh;
		int lon = num.length();
		for(int i=0;i<lon;i++)
		{
			ans+=num.charAt(i)-'0';
		}
		System.out.println(ans+" "+lon);
	}
}

区别是在c++中如果想加起来各位数之和的话只需要-'0’就行了,但是在java中需要把string中每个字符都转换成字符才行,使用charAt函数
其他的string函数的用法好像是差不多 都在下面了:

package practice;
import java.util.*;
public class 第五章
{
	public static void main(String[] args)
	{
		Scanner in= new Scanner(System.in);
		char a[]= {'g','o','o','d'};
		String str1 = new String(a);//声明string类
		System.out.println(str1);//相当于String str = new String("good");
		
		
		
		char b[]= {'s','t','u','d','e','n','t'};
		String str2 = new String(b,2,4);
		System.out.println(str2);//从下标2到下标4,对应了uden
		
		
		
		String str3 = "we are student";
		System.out.println(str3);
		String s1="hello";
		String s2="world!";
		String s=s1+" "+s2;
		System.out.println(s);
		//System.out.println("i like 
		//java!"); 这是不允许的,相连的字符串不能写在两行
		//但是可以在末尾加"+" 比如这样:
		System.out.println("i like"+
				" java");
		
		
		
		int booktime = 4;
		float practice = 2.5f;
		System.out.println("我每天花费 "+booktime+" 小时看书 ;  "+practice+" 小时上机练习");
		//输出结果为我每天花费 4 小时看书 ;  2.5 小时上机练习  这里的int类型变成了string类型
		System.out.println("我每天花费 "+booktime+" 小时看书 ;  "+practice+booktime+" 小时上机练习");
		//输出结果为我每天花费 4 小时看书 ;  2.54 小时上机练习  就是由于这里的int类型变成了string类型
		System.out.println("我每天花费 "+booktime+" 小时看书 ;  "+(booktime+practice)+" 小时上机练习");
		//输出结果为我每天花费 4 小时看书 ;  6.5 小时上机练习,所以要先加括号让他们先加上再变成string类型输出
		
		
		
		String str4 = "we are students";
		int l=str4.length();//获取字符串长度
		System.out.println(l);//每个字符都算进去,包括空格
		
		
		
		String str5 = "abcabcabc";
		String strfind = "abc";
		//indexOf函数用来再指定的字符串中寻找第一次出现指定子串的位置下标
		int find1 = str5.indexOf(strfind);
		
		
		
		//lastindexOf函数用来在指定的字符串中寻找最后一次制定子串出现的位置下标
		int find2 = str5.lastIndexOf(strfind);
		System.out.println(find1+" "+find2);//输出0 3 第一次找到abc的地方是下标为0的地方
		//最后一次出现的地方下标是6 所以输出0 6
		System.out.println(str5.indexOf("d"));//找不到返回-1
		
		
		
		String str6 = "hello world";
		//charAt函数用来找制定字符串中指定位置的字符
		char ch = str6.charAt(6);
		System.out.println(ch);//输出'w' 
		
		
		
		//String 类的substring()方法对字符串进行截取.substring(beginIndex)
		String strjiequ1 = str6.substring(3);
		System.out.println(strjiequ1);//输出lo world 从下标3开始截取到最后
		
		
		
		//String 类的substring()方法对字符串进行截取str6.substring(beginIndex, endIndex)
		String strjiequ2 = str6.substring(0,3);
		System.out.println(strjiequ2);//输出hel 从0到3(下标)
		
		
		
		//去除空格
		String str7 = "  java  class   ";
		System.out.println("字符串原来的长度为: "+str7.length());//16
		System.out.println("去掉前导和后缀空格以后的长度为: "+str7.trim().length());//11
		//str.trim()可以去掉str字符串前后的空格
		
		
		
		String str8 = "address";
		//str.replace(oldChar, newChar) 把oldchar 换成 newchar
		//如果有很多的oldchar需要转换,那么replace方法会把它们都转化成newchar
		String newstr8 = str8.replace("a","A" );
		System.out.println(newstr8);
		
		
		
		//判断字符串的开始和结尾是否为规定的子串
		String num1 = "22045612";
		String num2 = "21304578";
		boolean b1 = num1.startsWith("22");
		boolean b2 = num1.endsWith("78");
		boolean b3 = num1.startsWith("22");
		boolean b4 = num1.endsWith("78");
		System.out.println("字符串num1是以22开始的吗? "+b1);//输出:字符串num1是以22开始的吗? true
		System.out.println("字符串num1是以78结束的吗? "+b2);//输出:字符串num1是以78结束的吗? false
		System.out.println("字符串num2是以22开始的吗? "+b3);//输出:字符串num2是以22开始的吗? true
		System.out.println("字符串num2是以78结束的吗? "+b4);//输出:字符串num2是以78结束的吗? false
		//num1.startsWith(prefix) 判断num1是否以prefix开头
		//num1.endsWith(suffix)  判断num2是否以suffix结尾
		
		
		
		//判断字符串是否相等
		String tom="java";
		String jerry="java";
		System.out.println(tom==jerry);//此时输出ture: 因为这里只有值没有地址,string不是new的
		
		String tom2=new String("java");
		String jerry2=new String("java");
		System.out.println(tom2==jerry2);//此时输出false:因为这里字符串是对象,tom2和jerry2是引用,内存不一样,无法判断
		
		
		//使用tom2.equals(anObject) 判断tom2和anObject是否相同(完全相同,区分大小写)
		//使用tom2.equalsIgnoreCase(anotherString) 判断同tom2和anObject是否相同(不分大小写,拼写一样就行)
		
		
		//按字典序比较两个字符串str.compareTo(String otherstr) 是str和otherstr比的
		String str11 = new String("b");
		String str12 = new String("a");
		String str13 = new String("c");
		System.out.println(str11 +" compareTo "+str12 +":" +str11.compareTo(str12));//b compareTo a:1
		System.out.println(str11 +" compareTo "+str13 +":" +str11.compareTo(str13));//b compareTo c:-1
		
		
		//字母大小写转换 toLowerCase() 和 toUpperCase()
		String str14 = "abc";
		String str15 = "DEF";
		System.out.println(str14.toUpperCase()+"   "+str15.toLowerCase());//print: ABC   def
		
	}
}

//用split函数对字符串进行分割,放到字符串数组中

String strr = "192.168.0.1";
		String[] firstArray = strr.split("\\.",1);//分割一次=0
		String[] secondArray = strr.split("\\.",2);//分割两次相当于从第一个分割一次 输出:[192][168.0.1]
		String[] thirdArray = strr.split("\\.");//全部分割 分割成四个部分[192][168][0][1]
		for(String i : firstArray)
		{
			System.out.print("["+i+"]");
		}
		System.out.println();
		for(String i : secondArray)
		{
			System.out.print("["+i+"]");
		}
		System.out.println();
		for(String i : thirdArray)
		{
			System.out.print("["+i+"]");
		}
		System.out.println();

各种格式化

1.日期格式化

package practice;

import java.util.Date;
public class Eval 
{
	public static void main(String[] args)
	{
		//日期格式化
		Date date = new Date();
		String year = String.format("%tY",date);
		String month = String.format("%tB",date);
		String day = String.format("%td",date);
		System.out.println("今年是:"+year+"年");
		System.out.println("现在是:"+month+"月");
		System.out.println("今天是:"+day+"号");
	}
}

2.加上时,分,秒

package practice;

import java.util.Date;
public class Eval 
{
	public static void main(String[] args)
	{
		//日期格式化
		Date date = new Date();
		String year = String.format("%tY",date);
		String month = String.format("%tB",date);
		String day = String.format("%td",date);
		System.out.println("今年是:"+year+"年");
		System.out.println("现在是:"+month);
		System.out.println("今天是:"+day+"号");
		String hour = String.format("%tH",date);
		String minutes = String.format("%tM",date);
		String second = String.format("%tS",date);
		System.out.println("现在是:"+hour+"时"+minutes+"分"+second+"秒");
	}
}

3.格式化常见的日期时间组合

package practice;

import java.util.Date;
public class DateAndTime
{
	public static void main(String[] args)
	{
		Date date = new Date();
		String time = String.format("%tc",date);
		String form = String.format("%tF",date);
		System.out.println("全部的时间信息是 :"+time);
		System.out.println("年-月-日格式 :"+form);
	}
}

4.常规类型的格式化==

package practice;
import java.util.Date;
public class General {
	public static void main(String args[])
	{
		String str = String.format("%d",400/2);//十进制显示
		String str2 = String.format("%b",3>5);//boolean 类型显示
		String str3 = String.format("%x",200);//200以16进制输出
		System.out.println("400的一半是"+str);
		System.out.println("3>5对吗"+str2);
		System.out.println("200的十六进制数:"+str3);
	}
}

5.正则表达式:

package practice;

public class judge {
	public static void main(String[] args)
	{
		String regex="\\w+@\\w+(\\.\\w{2,3})*\\.\\w{2,3}";
		String str1 = "aaa@1";
		String str2 = "aaaaa";
		String str3 = "123456789@qq.com";
		if(str1.matches(regex))
		{
			System.out.println(str1+"是个合法的E-mail地址格式");
		}
		if(str2.matches(regex))
		{
			System.out.println(str2+"是个合法的E-mail地址格式");
		}
		if(str3.matches(regex))
		{
			System.out.println(str3+"是个合法的E-mail地址格式");
		}
	}
}

这里只有第三个str3是合法的e-mail地址格式,因为第str1不满足.***结尾,str2没有@

解释:
\\w字符集匹配到任意字符
==+==放在后面表示字符可以出现1次或者多次
==(\\.\\{2,3})==表示形如.com格式的字符串可以出现0次或者多次
==\\.\\w{2,3}==匹配结尾字符 如.com

字符串生成器

package practice;

public class judge {
	public static void main(String[] args)
	{
		StringBuilder builder = new StringBuilder("");
		builder.append("233");
		System.out.println(builder);
		builder.insert(1,"555");
		System.out.println(builder);
		builder.delete(0, 2);
		System.out.println(builder);
	}
}

1.字符串生成器的创建

StringBuilder builder = new StringBuilder("");

2.向生成器中添加字符串

	builder.append("233");
	System.out.println(builder);

此时是向尾部加入

3.指定位置插入字符串

	System.out.println(builder);
	builder.insert(1,"555");

从下标1往后加入字符串

4.删除指定地方的字符串

	builder.delete(0, 2);
	System.out.println(builder);

此时是删除0-2下标对应的字符

使用字符串生成器的好处是极大的提高了频繁增加字符串的效率 eg:创建一个10000字符的字符串 用StringBuilder只需要1ms或者不到,而简朴的string则需要使用578ms

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值