很久以前有个同学问了我一道很简单的问题:输入一个整数,输出它的数位和各个位上的数之和,上来一想用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