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 什么是静态字段 在开始之前,先上图,解释一下什么是类的静态字段(我有的时候会叫它类的静态变量,总之说的都是 ...
随机推荐
- css盒子水平垂直居中的几种方式
第一种:son盒子中定位的上下左右全部为0,然后margin:auto 1 <!DOCTYPE html> 2 <html lang="en"> 3 < ...
- API Gateway vs Load Balancer:选择适合你的网络流量管理组件
本文从对比了 API Gateway 和 Load Balancer 的功能区别,帮助读者更好地了解他们在系统架构中扮演的角色. 作者陈泵,API7.ai 技术工程师. 原文链接 由于互联网技术的发展 ...
- AspNetCore 成长杂记(一):JWT授权鉴权之生成JWT(其一)
引子 最近不知怎么的,自从学了WebAPI(为什么是这个,而不是MVC,还不是因为MVC的Razor语法比较难学,生态不如现有的Vue等框架,webapi很好的结合了前端生态)以后,使用别人的组件一帆 ...
- RTSP&IGMP详解
RTSP协议 一.概述 1)RTSP(Real ...
- Python-pprint的简单使用
Data pretty printer 一.简介 print()和pprint()都是python的打印模块,功能基本一样,唯一的区别就是pprint()模块打印出来的数据结构 ...
- Irwin-Hall 分布学习笔记
定理:Irwin-Hall 分布 对于 \(n\) 个在 \([0,1]\) 内均匀分布的实数随机变量,它们的和不超过一个实数 \(z\) 的概率为: \[F(z)=\sum\limits_{k=0} ...
- MQTT-保留消息和遗嘱消息
保留消息 为什么需要保留消息 如果不考虑持久会话的因素,那么MQTT订阅只有在客户端连接之后才能创建,所以服务端不能提前预知某个主题会被哪些服务端订阅或者某个客户端会订阅哪些主题,所以当消息到达服 ...
- 第一个c语言项目
怎么写代码呢 工具:编译器 市面上编译器主要有:clang,gcc,win-tc,msvc,turbo c等 怎么写呢 1.创建一个项目(项目名字不能以中文文字命名) 2.创建一个文件(项目名字不能以 ...
- 存下吧!Spring高频面试题总结
Spring是什么? Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架. Spring的优点 通过控制反转和依赖注入实现松耦合. 支持面向切面的编程,并且把应用业务逻辑和系统 ...
- 超实用的Go语言基础教程,让你快速上手刷题!!
背景 工欲善其事,必先利其器.掌握Go的基础语法还不够,还需要勤加练习,修习"外功",才能达到出奇制胜的效果. 在大致了解Go语言的基本语法后,我就迫不得已地想使用这门语言.可是我 ...