Java语法基础学习DayEighteen(常用类)
一、String类
1.特点
String代表不可变的字符序列,底层用char[]存放。
String是final的。
2.内存解析
3.常用方法
int length()
char charAt(int index):返回指定位置的字符
boolean equals(Object obj):比较字符串的内容是否相等
int compareTo(String anotherString):对字符串内容按字典顺序进行大小比较,当前对象比参数大返回正整数,反之返回负整数,相等返回0。
int indexOf(String s):返回S在字符串中首次出现的位置,没有返回-1
int indexOf(String s, int startpoint):返回s从字符串的startpoint的位置开始首次出现的位置。
int lastIndexOf(String s):返回s在字符串中最后一次出现的位置
boolean startsWith(String prefix):测试此字符串从指定索引开始的子字符串是否以指定前缀开始。
boolean endsWith(String prefix):测试此字符串是否以指定的后缀结束。
boolean regionMatches(int firstStart,String other,int otherStart,int len):测试两个字符串区域是否相等。
String substring(int startpoint):返回一个新的字符串,它是此字符串的一个子字符串。
String substring(int start, int end)
String replace(char oldChar, char newChar):返回一个新的字符串,它是通过用 newChar
替换此字符串中出现的所有 oldChar
得到的。
String replaceAll(String old , String new):使用给定的new替换此字符串所有匹配给定的正则表达式的子字符串。
String trim():返回字符串的副本,忽略前导空白和尾部空白,中间的空格不变。
String concat(String str):将指定字符串连接到此字符串的结尾。
String[] split(String regex):根据给定正则表达式的匹配拆分此字符串。
题目1
//模拟一个trim方法,去除字符串两端的空格
public static String myTrim(String str){
int start = ;
int end = str.length() - ;
while(start < end && str.charAt(start) == " "){
start++;
}
while(start < end && str.charAt(end) == " "){
end--;
}
return str.subString(start,end + );
}
题目2
public class Test{
public static void main(String[] args){
String str = "abcdefg";
String str1 = reverseString(str,,);
System.out.println(str1);//输出abedcfg
String str2 = reverseString2(str,,);
System.out.println(str2);//输出abedcfg
}
//将一个字符串进行反转,将字符串中指定部分进行反转,比如将“abcdefg”反转为“abfedcg”
public static String reverseString(String str, int start, int end){
char[] c = str.toCharArray();//字符串--->字符数组
return reverseArray(c,start,end);
}
public static String reverseArray(char[] c, int start, int end){
for(int i = start,j = end;i < j; i++,j--){
char temp = c[i];
c[i] = c[j];
c[j] = temp;
}
return new String(c);//字符数组--->字符串
}
//字符串的反转方法二,可使用StringBuffer继续优化
public static String reverseString2(String str, int start, int end){
String str1 = str.substring(,start);
for(int i = end;i >= start;i--){
char c = str.charAt(i);
str1 += c;
}
str1 = str1.concat(str.substring(end+));
return str1;
}
}
题目3
public class Test{
public static void main(String[] args){
String str1 = "abdasdvabdfab";
String str2 = "ab";
System.out.println(getTime(str1,str2));//输出3
}
//返回一个字符串在另一个字符串中出现的次数,即str2在str1中出现次数
public static int getTime(String str1, String str2){
int count = ;
int index;
while((index = str1.indexOf(str2)) != -){
count++;
str1 = str1.substring(index+str2.length());
}
return count;
}
}
题目4
import java.util.ArrayList;
import java.util.List;
public class Test{
public static void main(String[] args){
String str1 = "freghelloyujkuy";
String str2 = "freghsdwhellodf";
System.out.println(getMaxSubstring(str1,str2));//输出[fregh,hello]
}
//返回两个字符串中最大相同子串
public static List<String> getMaxSubstring(String str1, String str2){
List<String> list = new ArrayList<>();
String longStr,shortStr;
if(str1.length() < str2.length()){
longStr = str2;
shortStr = str1;
}else{
longStr = str1;
shortStr = str2;
}
int len = shortStr.length();
for(int i = ; i < len; i++){//i相当于短字符串截去字符的个数
for(int x = , y = len-i;y <= len;x++,y++){//把截取到的子串区间逐步往后挪
String str = str2.substring(x,y);
if(longStr.indexOf(str) != -){
list.add(str);
}
}
if(list.size() != ){
return list;
}
}
return null;
}
}
题目5
import java.util.Arrays;
public class Test{
public static void main(String[] args){
String str = "gbsdxizame";
System.out.println(sort(str));//输出abdegimsxz
}
//对字符串中的字符按自然顺序排序
public static String sort(String str){
char[] c = str.toCharArray();
Arrays.sort(c);
return new String(c);
}
}
4.字符串与基本数据类型、字节数组、字符数组之间的转换
字符串与基本数据类型、包装类的相互转换:
//调用相应包装类的parseXxx(String str)方法
int i = Integer.parseInt(str1);
//调用String类的重载的valueOf()方法
String str2 = String.valueOf(i);
字符串与字节数组的相互转换:
String str1 = "abc123";
//调用String类的getBytes()方法
byte[] b = str1.getBytes();
//调用String类的构造器
String str2 = new String(b);
字符串与字符数组的相互转换:
String str1 = "abc123中国人";
//调用String类的toCharArray()方法
char[] c = str1.toCharArray();
//调用String类的构造器
String str2 = new String(c);
二、StringBuffer类
1.概述
java.lang.StringBuffer代表可变的字符序列,可以在原有的基础上对字符串内容进行增删。
2.和String的区别
String对象对应的字符序列的容量和存放内容的长度是一致的,因此两个String对象相加会创建另外一个字符序列去存放新的String,因为容量不够。
而StringBuffer对象对应的字符序列有一个初始的容量,所以可以往容量未满的StringBuffer对象添加内容,所以说StringBuffer是可变的字符序列。
3.常用方法
StringBuffer append(Xxx x):将 Xxx 参数的字符串表示形式追加到此序列
StringBuffer insert(int index, Xxx x):将Xxx 参数的字符串表示形式在index位置插入到此序列中。
StringBuffer reverse():将此字符序列用其反转形式取代。
StringBuffer delete(int startIndex, int endIndex):移除此序列的子字符串中的字符。
void setCharAt(int index, char ch):将给定索引处的字符设置为 ch
。
StringBuffer replace(int start, int end, String str):使用给定 String
中的字符替换此序列的子字符串中的字符。
int indexOf(String str):返回第一次出现的指定子字符串在该字符串中的索引。
char charAt(int index):返回此序列中指定索引处的 char
值。
String substring(int start , int end):返回一个新的 String
,它包含此序列当前所包含的字符子序列。
三、StringBuilder类
1.概述
可变的字符序列,是jdk5.0新加入的,线程不安全,效率要高于StringBuffer
2.效率对比
StringBuilder > StringBuffer > String
四、与时间有关的类
1.java.lang.System类
System类提供的public static long currentTimeMillis()用来返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。
此方法适用于计算时间差。
2.java.util.Date类
表示特定的瞬间,精确到毫秒,不易于国际化
常用方法:
Date()、Date(long date):构造方法,获取本地当前时间。
getTime():返回自1970年1月1日0时0分0秒 GMT 以来此Date对象表示的毫秒数。
toString():把Date对象转换成String形式
代码:
Date d1 = new Date();
System.out.println(d1.toString());//Fri Mar 22 17:17:06 CST 2019
System.out.println(d1.getTime());//
Date d2 = new Date(d1.getTime());
System.out.println(d2);//Fri Mar 22 17:17:06 CST 2019
3.java.text.SimpleDateFormat类
是一个不与语言环境有关的方式来格式化和解析日期的具体类,易于国际化。
格式化:(日期 - - -> 文本)调用String format(Date date)方法格式化时间对象date
解析:(文本 - - -> 日期)调用Date parse(String source)方法从给定字符串的开始解析文本,以生成一个日期。
代码:
//不带参格式化
SimpleDateFormat sdf = new SimpleDateFormat();
String date1 = sdf.format(new Date());
System.out.println(date1);//19-3-22 下午5:48
//带参格式化
SimpleDateFormat sdf1 = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z");
String date2 = sdf1.format(new Date());
System.out.println(date2);//星期五, 22 三月 2019 17:48:59 +0800
//解析
Date d1 = sdf.parse(date1);//注意格式要匹配,比如这里的参数不能是date2
System.out.println(d1);//Fri Mar 22 17:48:00 CST 2019 Date d2 = sdf1.parse(date2);//这里的参数不能是date1
System.out.println(d2);//Fri Mar 22 17:48:59 CST 2019
例题:”三天打渔,两天晒网“,问从1990-01-01开始以上循环,XXXX-XX-XX这一天是在打渔还是在晒网?
import java.util.Date;
import java.text.SimpleDateFormat;
import java.text.ParseException;
public class Test{
public static void main(String[] args) throws Exception{
String date1 = "1990-01-01";
String date2 = "1990-01-04";
int dates = getDays(date1,date2);
if(dates % == ||dates % == ){
System.out.println("这一天在晒网");
}else{
System.out.println("这一天在打渔");
}
}
//返回从XXXX-XX-XX到1990-01-01的天数
public static int getDays(String date1, String date2) throws ParseException{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date d1 = sdf.parse(date1);
Date d2 = sdf.parse(date2);
long milliTime = d2.getTime()-d1.getTime();
return (int)milliTime/// + ;
}
}
4.java.util.Calendar类
Calendar是一个抽象基类,主要用于完成日期字段之间互相操作的功能
get()/add()/set()/Date getTime()/setTime(Date d)示例:
public static void main(String[] args) throws Exception{
Calendar c = Calendar.getInstance();//实例化方法:getInstance()
int day = c.get(Calendar.DAY_OF_MONTH);//获取当前时间是本月的第几天
System.out.println(day);// c.add(Calendar.DAY_OF_MONTH, -);//给对象c的DAY_OF_MONTH加-2天
day = c.get(Calendar.DAY_OF_MONTH);
System.out.println(day);// c.set(Calendar.DAY_OF_MONTH,);
Date d = c.getTime();//返回一个Date对象,时间为c的时间。
System.out.println(d);//Tue Mar 26 19:12:35 CST 2019
}
五、Math类(详见API)
六、BigInteger类
数字范围比Integer类的数字范围大得多,可以支持任意精度的整数。
七、BigDecimal类
用于天文、商业计算等要求数字精度比较高的地方,支持任意精度的定点数。
Java语法基础学习DayEighteen(常用类)的更多相关文章
- Java语法基础学习DaySeventeen(多线程续)
一.线程的特点 1.线程的分类 java中的线程分为两类:守护线程和用户线程.唯一的区别是判断JVM何时离开. 守护线程是用来服务用户线程的,通过在start()方法前调用Thread.setDaem ...
- Java语法基础学习DayThirteen(枚举类和注解)
一.枚举类 1.概述:即一个类中只能有有限个对象,若只有一个对象,则可以作为单例模式的一种实现. 2.自定义枚举类(JDK1.5以前这么做) //枚举类 class Season{ //1.提供类的属 ...
- Java语法基础学习DaySeven
---恢复内容开始--- 一.包装类——Wrapper 1.定义:针对八种基本数据类型定义相应的引用类型——包装类(封装类) boolean——Boolean byte——Byte ...
- Java语法基础学习DaySix
一.JavaBean——可重用组件 1.JavaBean是指符合以下标准的Java类: (1)类是公共的 (2)有一个无参的公共的构造器 (3)有属性,且有对应的get.set方法 2.好处 用户可以 ...
- Java语法基础学习DayThree
一.流程控制语句补充 1.switch语句 格式: switch(表达式) { case 值1: 语句体1; break; case 值2: 语句体2; break; ... default: 语句体 ...
- Java语法基础学习DayTwentyOne(网络编程)
一.IP地址和端口号 1.作用 通过IP地址,唯一的定位互联网上一台主机. 端口号标识正在计算机上运行的进程,不同进程有不同的端口号,被规定为一个16位的整数0~65535,其中0~1023被预先定义 ...
- Java语法基础学习DayTwenty(反射机制续)
一.Java动态代理 1.代理设计模式的原理 使用一个代理将对象包装起来, 然后用该代理对象取代原始对象. 任何对原始对象的调用都要通过代理. 代理对象决定是否以及何时将方法调用转到原始对象上. 2. ...
- Java语法基础学习DayNineteen(反射机制)
一.Refection定义 1.概述 Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性 ...
- Java语法基础学习DaySixteen(多线程)
一.多线程的创建 1.作用 程序需要同时执行两个或多个任务时需要多线程. 程序需要实现需要等待的任务时,如用户输入.文件读写操作.网络操作.搜索等,需要多线程. 需要一些后台运行的程序时,需要多线程. ...
随机推荐
- Javascript 面向对象编程2:构造函数的继承
这个系列的第一部分,主要介绍了如何"封装"数据和方法,以及如何从原型对象生成实例.对象之间的"继承"的五种方法.比如,现在有一个"动物"对象 ...
- 如何将数据库中的数据导入到Solr中
要使用solr实现网站中商品搜索,需要将mysql数据库中数据在solr中创建索引. 1.需要在solr的schema.xml文件定义要存储的商品Field. 商品表中的字段为: 配置内容是: < ...
- K8S学习笔记之Kubernetes数据持久化方案
在开始介绍k8s持久化存储前,我们有必要了解一下k8s的emptydir和hostpath.configmap以及secret的机制和用途. 0x00 Emptydir EmptyDir是一个空目录, ...
- Linux TCP并发请求溺出 调优
TCP并发请求溺出 调优:系统开启某个监听端口后,当多个TCP请求连接监听端后,会把多个请求交给backlog的默认监听队列由socket server一并处理,backlog有自己的队列长度默认12 ...
- rman copy相关
1.db_file_name_convert备份保持原来文件名一致 backup as copy db_file_name_convert=('/u01/app/oracle/oradata/slnn ...
- SSM-网站后台管理系统制作(4)---Ajax前后端交互
前提:Ajax本身就为前后端交互服务的,实现功能:用户输入信息,实时判断用户的情况,这也是现在登录界面普遍流行的做法.前端js通过注释识别Controller层,该层查询返回,和之前Google验证码 ...
- error: 'Can't connect to local MySQL server through socket '/data/3307/data/mysql.sock' (2)'
centos7.5 重启mysql报错 问题: [root@db01-51 ~]# mysqladmin -uroot -p123 -S /data/3307/data/mysql.sock shut ...
- python基础知识点四
网络编程(socket) 软件开发的架构: 两个程序之间通讯的应用大致通过从用户层面可以分为两种: 1是C/S,即客户端与服务端,为应用类的,比如微信,网盘等需要安装桌面应用的 2是B/S,即浏览器与 ...
- (转载)C#关于DateTime得到的当前时间的格式和用法
今天看到工程里有关DateTime的有关知识,之前了解一些用法,比如怎么获取年月日,当前系统时间等等,但是,感觉还是有好多不知道,于是上网搜罗了一下,找到很多有关知识,现在与大家分享下: Date ...
- vue搭建前端相关命令
Vue搭建.新建工程并打开浏览器调试的指令: 这四行命令就是我们接下来工作了. 1.npm install –global vue-cli 我们在安装好nodejs后就可以用到“npm”这个前缀指令, ...