10/28-29_String类_SrtingBuffer类_Interger类_笔记
API:应用程序编程接口
String功能
public String replace (char oldchar ,char newchar); //符串中某一字符被一新字符替换
public String replace (String oldstr ,String newstr);//字符串中某一字符串被一新字符串替换
public String trim();//去除字符串两端的空格
public int compareTo(String anotherString);//比较两个字符串
package Test_book;
/**
* @author Aoman_Hao
*
*/
public class String1 {
public static void main(String[] args) {
String s1="WE today lose. ";
//字符替换
String s2=s1.replace('W', 'S');
//字符串替换
String s3=s1.replace("WE today", "SSG will");
System.out.println(s2+"\n"+s3);
}
}
输出:
SE today lose.
SSG will lose.
String :
字符串常量,字符不可改变,同步,线程安全,效率比较低。
StringBuffer :
(buffer-缓冲区)字符串变量,可变字符序列,同步,线程安全,效率相对String比较高。StringBuffer是一个容器,最终会通过toString方法变成字符串
StringBuilder :
字符串变量,可变字符序列,不同步,线程不安全,效率比StringBuffer高。一般优先选择StringBuilder。
注:String因为其定义新变量时,需要在内存中开辟新空间,比较费资源。而StringBuffer和StringBuilder会产生字符缓冲区,字符缓冲区不占内存。
线程安全与不安全:
概念:如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。
线程安全的程序,多进程需要访问数据时,只有某个单进程才能更改数据,其他的进程需要等待次进程的结束,然后才能访问或者更改数据。
经常改变内容的字符串最好不要用String,因为新生成的字符串占据珍贵内存空间,旧字符串成为无引用对象后,JVM的GC的工作量加大,会降低运行速度。
对于三者使用的总结:
1.如果要操作少量的数据用 = String
2.单线程操作字符串缓冲区 下操作大量数据 = StringBuilder
3.多线程操作字符串缓冲区 下操作大量数据 = StringBuffer
StringBuffer:
public int length;//字符串长度
public int capacity;//获取当前字符串缓冲区的容量,capacity默认容量为16, //小于16则不需扩展,如果大于16则会直接扩展到旧的容量
//(value的长度)*2+2
append (String str);//给缓冲区追加数据
insert (int offset,String str);//插入字符串
package Test_book;
/**
* @author Aoman_Hao
*
*/
public class String2 {
public static void main(String[] args) {
StringBuffer s1= new StringBuffer("SKT will win!");
//长度
int num1=s1.length();
System.out.println(num1);
//一般默认缓冲区大小为16
StringBuffer sb1 = new StringBuffer();
System.out.println("sb1的缓冲区容量:"+sb1.capacity());
//现设置缓冲区容量大小为25
StringBuffer sb2 = new StringBuffer(30);
System.out.println("sb2的缓冲区容量:"+sb2.capacity());
//缓冲区追加字符
StringBuffer sb3 = s1.append("LOL");
System.out.println("追加:"+sb3.toString());
//插入字符串
StringBuffer sb4 = s1.insert(4,"not SSG ");
System.out.println("插入:"+sb4.toString());
}
}
输出:
13
sb1的缓冲区容量:16
sb2的缓冲区容量:30
追加:SKT will win!LOL
插入:SKT not SSG will win!LOL
StringBuffer:
delete (int start,int end);//删除指定位置区域的数据,但end位置处的数据不删除
deleteCharAt(int index);//删除指定位置处的字符
reverse();//字符串中的字符序列反转
toString();//字符缓冲区的数据转换为String类型
package Test_book;
/**
* @author Aoman_Hao
*
*/
public class String3 {
public static void main(String[] args) {
StringBuffer s1 = new StringBuffer("SKT 123 will win!LOL");
//删除指定位置的字符
StringBuffer s2 = s1.deleteCharAt(4);
System.out.println("删除指定位置字符:"+s2);
//删除指定位置1及指定位置1与指定位置2之间的字符,指定位置2的字符不删除
StringBuffer s3 = s1.delete(4, 7);
System.out.println("删除范围字符:"+s3);
//反转字符
StringBuffer s4 = s1.reverse();
System.out.println("反转:"+s4);
//字符缓冲区的数据转换为String类
String s5 =s1.toString();
System.out.println("转换为String类:"+s5);
}
输出:
删除指定位置字符:SKT 23 will win!LOL
删除范围字符:SKT will win!LOL
反转:LOL!niw lliw TKS
转换为String类:LOL!niw lliw TKS
注:有以上结果可以看出String类在内存中的数据再引用给其他变量时,会新生成数据;StringBuffer类在字符缓冲区的数据被访问后,直接在数据上进行修改然后把地址符赋予新变量,因为旧变量与新变量的地址指向都是同一个数据,所以旧变量的值在数据修改之后与新变量是一样的。
StringBuffer:
replace (int start,int end,string str);//替换字符串
substring (int strat);//截取字符串
substring (int start,int end);
package Test_book;
/**
* @author Aoman_Hao
*
*/
public class Stringbuffer2 {
public static void main(String[] args){
StringBuffer s1 = new StringBuffer("Aoman 123");
//替换
StringBuffer s2= s1.replace(6, 9, "666!");
System.out.println("替换:"+s2);
//截取
String s3 = s2.substring(0,8);
System.out.println("截取:"+s3);
//
String s4 = s2.substring(0,s2.length()-1).toString();
System.out.println("截取:"+s4);
}
}
输出:
替换:Aoman 666!
截取:Aoman 66
截取:Aoman 666
Interger:
把基本数据类型自动封装成引用类型,为了和Sring类做转换。
基本类型–引用类型
int – Integer
char – Character
byte – Byte
boolean –Boolean
double – Double
float – Float
long – Long
short – Short
Integer(int value)int类型数据封装为引用类型
Integer (String str) 字符串类型封装为引用类型
注:字符串仅为纯数字字符串,否则会运行报错。
package Test_book;
/**
* @author Aoman_Hao
*
*/
public class Integer1 {
public static void main(String[] args) {
Integer s1 = (666);
Integer s2 = new Integer("123666");
System.out.println(s1);
System.out.println(s2);
}
}
输出:
666
123666
int类型与String类型相互转换:
int转换为String类型
package Test_book;
/**
* @author Aoman_Hao
*
*/
public class Integer2 {
public static void main(String[] args) {
//字符串拼接
String s1 = ""+num;
System.out.println(s1);
//用Integer类型引用
Integer s2 = new Integer(num);
String s3 = s2.toString();
System.out.println(s3);
//链式
String s4 = Integer.toString(num);
System.out.println(s4);
}
}
Integer转换为int类型
package Test_book;
/**
* @author Aoman_Hao
*/
public class Integer3 {
public static void main(String[] args) {
String s1 = "7421666";
//int值返回Integer类型值
Integer s2 = new Integer(s1);
int num = s2.intValue();
System.out.println(num);
//parseint方法
int num2=Integer.parseInt(s1);
System.out.println(num2);
}
}
Character类:
character(char value);//在对象中包装一个基本类型char的值
//character类型对象包含类型为char的单字符
Character类:
public static boolean isLowerCase (char ch);判断指定字符是否为小写
public static boolean isUpperCase (char ch);判断指定字符是否为大写
public static boolean isDigit (char ch);判断指定字符是否为数字
package Test_book;
import java.util.Scanner;
/**
* @author Aoman_Hao
*/
public class Character1 {
public static void main(String[] args) {
//键盘录入数据
int Lnum=0,Unum=0,Dnum=0;
Scanner sc = new Scanner(System.in);
System.out.println("请输入一行字母、数字:");
String s1 = sc.nextLine();
char[] arr = s1.toCharArray();
//判断
for(int i=0;i<s1.length();i++){
char arr1 = arr[i];
if(Character.isLowerCase(arr1)){
Lnum ++;
}else if(Character.isUpperCase(arr1)){
Unum ++;
}else if(Character.isDigit(arr1)){
Dnum ++;
}
}
System.out.println("小写字母数:"+Lnum);
System.out.println("大写字母数:"+Unum);
System.out.println("数字数目d:"+Dnum);
}
}
输出:
请输入一行字母、数字:
afafgd234hbfghbdfaGSDFSA
小写字母数:15
大写字母数:6
数字数目:3
10/28-29_String类_SrtingBuffer类_Interger类_笔记的更多相关文章
- 背水一战 Windows 10 (28) - 控件(文本类): TextBox, PasswordBox
[源码下载] 背水一战 Windows 10 (28) - 控件(文本类): TextBox, PasswordBox 作者:webabcd 介绍背水一战 Windows 10 之 控件(文本类) T ...
- 2022/7/28 第七组陈美娜 API类
API:Application Program Interface应用程序接口 JDK给我们提供的一些已经写好的类,可以直接调方法来解决问题 类的方法在宏观上都可以称为接口 接口:1.interfac ...
- 背水一战 Windows 10 (37) - 控件(弹出类): MessageDialog, ContentDialog
[源码下载] 背水一战 Windows 10 (37) - 控件(弹出类): MessageDialog, ContentDialog 作者:webabcd 介绍背水一战 Windows 10 之 控 ...
- 背水一战 Windows 10 (36) - 控件(弹出类): ToolTip, Popup, PopupMenu
[源码下载] 背水一战 Windows 10 (36) - 控件(弹出类): ToolTip, Popup, PopupMenu 作者:webabcd 介绍背水一战 Windows 10 之 控件(弹 ...
- 背水一战 Windows 10 (35) - 控件(弹出类): FlyoutBase, Flyout, MenuFlyout
[源码下载] 背水一战 Windows 10 (35) - 控件(弹出类): FlyoutBase, Flyout, MenuFlyout 作者:webabcd 介绍背水一战 Windows 10 之 ...
- 10月27日PHP加载类、设计模式(单例模式和工厂模式)、面向对象的六大原则
加载类可以使用include.require.require_once三种中的任意一种,每个关键字都有两种方法,但是这种方法的缺点是需要加载多少个php文件,就要写多少个加载类的方法.一般也就需要加载 ...
- 10个最受欢迎的Java类(转)
原文:http://www.csdn.net/article/2012-06-04/2806277 每一个Java程序员都有一份属于自己的Java类排名表.这个排名表没有严格的规定,也没有可遵循的规则 ...
- Java 线程安全LocalTime 和LocaldateTime 新的Date和Time类 -JDK8新时间类的简单使用
不可变类且线程安全 LocalDate .java.time.LocalTime 和LocaldateTime 新的Date和Time类 DateTimeFormatter ==https://ww ...
- 日期类时间类,日期时间类,单例模式,装箱与拆箱,数字类随机数,BigDecimal总结
1.日期类,时间类,日期时间类 初步日期使用方法及格式转换方法(旧方法): 格式://Mon Jul 30 11:26:05 CST 2018 年月日时分秒 CST代表北 ...
- python的类和对象(类的静态字段)
转自:http://www.cnblogs.com/Eva-J/p/5044411.html 什么是静态字段 在开始之前,先上图,解释一下什么是类的静态字段(我有的时候会叫它类的静态变量,总之说的都是 ...
随机推荐
- CI框架调用第三方类库
public function index() { //调用第三方类库 /* * 注意事项: * library 里面调用的名字首字母必须是 大写 * 使用它的方法时 使用小写 */ $this-&g ...
- JUC(六)堵塞队列与线程池
堵塞队列 简介 def:在多线程中实现高效.安全的数据传输,主要是通过一个共享的队列,使得数据能够从一端输入,从另一端输出 当队列是空的,取数据的线程就会被堵塞,直到其他线程往空的队列中添加数据 当队 ...
- 机器学习07-(中文分词、样本类别均衡化、置信概率、k-means聚类算法、均值漂移聚类算法)
机器学习-07 机器学习-07 中文分词(jieba) 样本类别均衡化 置信概率 聚类模型 K均值算法 均值漂移算法 轮廓系数 DBSCAN算法 推荐引擎 代码总结 结巴分词 酒店评论舆情分析 针对测 ...
- ABC294Ex K-Coloring
Statement 对一张简单无向图进行 \(k\) 染色,满足对于每条边的两个端点颜色不同,求方案数. \(n,m\leq 30\). Solution 无向图 \(k\) 染色问题,很经典的问题. ...
- Oracle之table()函数的使用,提高查询效率
目录 一.序言 二.table()函数使用步骤 三.table() 具体使用实例 3.1 table()结合数组 使用 3.2 table()结合PIPELINED函数(这次报表使用的方式) 3.3 ...
- Sourcetree 提交顺序
总结:一共5个步骤 1.首先获取git主分支的代码. 2.暂存所需要上传的代码. 3.拉取代码(如发生文件冲突先暂不处理). 4.提交代码,然后再次拉取代码(不显示冲突跳下一步).如果还是显示文件冲突 ...
- 2023-04-19:给定一个非负数组arr 任何两个数差值的绝对值,如果arr中没有,都要加入到arr里 然后新的arr继续,任何两个数差值的绝对值,如果arr中没有,都要加入到arr里 一直到ar
2023-04-19:给定一个非负数组arr 任何两个数差值的绝对值,如果arr中没有,都要加入到arr里 然后新的arr继续,任何两个数差值的绝对值,如果arr中没有,都要加入到arr里 一直到ar ...
- 2022-11-07:给你一个 n 个节点的 有向图 ,节点编号为 0 到 n - 1 ,其中每个节点 至多 有一条出边。 图用一个大小为 n 下标从 0 开始的数组 edges 表示, 节点 i 到
2022-11-07:给你一个 n 个节点的 有向图 ,节点编号为 0 到 n - 1 ,其中每个节点 至多 有一条出边. 图用一个大小为 n 下标从 0 开始的数组 edges 表示, 节点 i 到 ...
- 2022-03-06:金币路径。 给定一个数组 A(下标从 1 开始)包含 N 个整数:A1,A2,……,AN 和一个整数 B。 你可以从数组 A 中的任何一个位置(下标为 i)跳到下标 i+1,i+
2022-03-06:金币路径. 给定一个数组 A(下标从 1 开始)包含 N 个整数:A1,A2,--,AN 和一个整数 B. 你可以从数组 A 中的任何一个位置(下标为 i)跳到下标 i+1,i+ ...
- 2021-12-31:给定一个arr,里面的数字都是0~9, 你可以随意使用arr中的数字,哪怕打乱顺序也行, 请拼出一个能被3整除的,最大的数字,用str形式返回。 来自去哪儿网。
2021-12-31:给定一个arr,里面的数字都是0~9, 你可以随意使用arr中的数字,哪怕打乱顺序也行, 请拼出一个能被3整除的,最大的数字,用str形式返回. 来自去哪儿网. 答案2021-1 ...