Java基础——String类(二)
今天做了几道String常见操作。先来几个代码实例:
例一:此方法,仅把字符串前后出现的空格去掉了,中间部分不会。
class TestTrim {
public static void main(String[] args) {
String str = " 这是一 个要 去 两端 空格 的字符串 "; str = trim(str);
System.out.println("去完空格以后:" + str);
} static String trim(String str) { int beginIndex = 0;
int endIndex = str.length() - 1; while (beginIndex <= endIndex) {
// 从前往后算空格
if (str.charAt(beginIndex) == ' ') {
beginIndex++;
} else {
break;
}
} while (beginIndex <= endIndex) {
// 从后往前算空格
if (str.charAt(endIndex) == ' ') {
endIndex--;
} else {
break;
}
} str = str.substring(beginIndex, endIndex + 1);
return str;
}
}
例二:
//字符串翻转
public class TestTrim2 {
public static void main(String[] args) {
String str = "请 把我 翻转 过来 "; char[] list = str.toCharArray(); for (int i = 0; i < list.length / 2; i++) {
char temp = ' '; temp = list[i];
list[i] = list[list.length - 1 - i];
list[list.length - 1 - i] = temp;
}
str = new String(list);
System.out.println(str);
}
}
例三:
//String 常见操作——获取
public class TestTrim3 {
public static void main(String[] args) {
String[] fileList = { "我是中国人", "我热爱我的祖国", "我在自学编程", "我将文件存为.java的形式了",
"我喜欢.java", "java读起来就很好听", "你喜欢java吗?", "和我一起学习.java",
"我通常将文件保存在E盘", "文件的名称为XXXX.java", "字节码文件为XXX.class" }; for (int i = 0; i < fileList.length; i++) {
if (fileList[i].startsWith("我") && fileList[i].endsWith(".java")
&& fileList[i].contains("中国"))
;
System.out.println("发现:" + fileList[i]);
}
} }
例四:
public class TestTrim4 {
public static void main(String[] args) {
StringBuffer buff = new StringBuffer();
buff.append("第一句话"); StringBuffer buff2 = buff;
buff2.append("这是第二句话"); System.out.println(buff);
System.out.println(buff2);
}
}
例五&例六:
//探讨StringBuffer的效率问题
public class TestTrim5 {
public static void main(String[] args) {
// 设置一个得到当前时间,来进行效率测试,以毫秒为单位。
long begin = System.currentTimeMillis(); String str = "";//下面沒有打印,有個小小的報錯,但不影響的
for (int i = 0; i < 50000; i++) {
str += i;
}
long end = System.currentTimeMillis(); System.out.println("程序运行了" + (end - begin) + "毫秒");
//System.out.println(str);為了測試,這個地方就不打印了,等全部打印出來就太慢了
}
}
//用StringBuffer测试效率
public class TestTrim6 {
public static void main(String[] args) { long begin = System.currentTimeMillis(); StringBuffer buff = new StringBuffer();
for (int i = 0; i < 50000; i++) {
buff.append(i);
} long end = System.currentTimeMillis(); System.out.println("程序一共执行了" + (end - begin) + "毫秒");
}
}
在例五和例六中,可以从打印方式去思考,为什么例六要不例五速度快那么多。
例五的执行方式就好比:
1
12
123
1234
12345
123456
1234567
12345678
.........
..........
...........
例六的执行方式就不一样了:
它是执行一次之后,下一次会再上一次保留的状态下继续往上堆。
1,2,3,4,5,6,7,8,9........(中间没有逗号哈,就是不停的往上加,直到循环结束。)
String转换类操作
==字符数组转成字符串
--String(char[]) 构造函数
--String(char[] value, int offset, int count)
char [] data={'a','b','c'};
String str=new String (data);
== String类的静态方法
--static String copyValueOf(char[] data)
--static String copyValueOf(char[] data, int offset, int count)
char[] cArray=new char[]{'广','阔','天','地'};
String str=String.copyValueOf(cArray,2,2); //从第过引为2的开始,拷贝2个
--static String valueOf(char[]); // 返回 char 数组参数的字符串表示形式。
char[] c=new char[]{'a','b','c','d'};
String str=String.valueOf(c); // abcd
== 将字符串,转换成数组(字符数组,字节数组)
char [] array=str.toCharArray();
byte[] b=str.getBytes()//注意,这个有点不太一样,照API讲
==将基本数据类型转换成字符串
String.valueOf(89); = 89+"" //Api中,共重载了9种
切割替换类操作
-- String replace(CharSequence target, CharSequence replacement) //
String str="中国人民,人民,人民";
str=str.replace("人民", "百姓");
如何把字符串中的所有的空格去掉 str=str.replace(" ","");
-- String[] split
String str="中国,美国,法国,小日本";
String [] list= str.split(",");
String str="中国|美国|法国|小日本";
String [] list=str.split("\\|"); //注意,要对|进行转义 (.也要转义)
-- String substring(int beginIndex)
String str="abcdefg";
str= str.substring(2); //从索引为2的位置(含) 开始截取
System.out.println(str); //cdefg
-- String substring(int beginIndex, int endIndex) beginIndex - 起始索引(包括) endIndex - 结束索引(不包括)。 顾头不顾尾
-- String toUpperCase(); //转换大小写
-- String toLowerCase();
-- String trim(); //去空格(去两端空格)
StringBuffer 的其他操作
删除
StringBuffer delete(int start, int end) //清空缓冲区 buff.delete(0,buff.length())
StringBuffer deleteCharAt(int index)
获取
char charAt(int index)
int indexOf(String str)
int lastIndexOf(String str)
String subString(int index,int end)
从哪索引开始 到哪个索引 从数组的哪开始存
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin); 将缓冲区的数据存到指定的字符数组里 //buff.getChars(2, 3, c, 3);
修改
StringBuffer replace(start,end,String)
void setCharAt(int index,char ch);
StringBuffer reverse();
//例子:
StringBuffer buff=new StringBuffer(str);
buff.reverse();
==== StringBuilder jdk1.5 以后出现的,它的功能和 StringBuffer相同
StringBuffer 是线程安全的,没有StringBuilder速度快
StringBuilder 是线程不安全的,速度快
包装类
基本数据类型的包装类
8种基本数据类型 (原生类)
byte Byte
short Short
int Integer
long Long
char Character
boolean Boolean
float Float
double Double
主要用于基本数据类型和字符串之间进行转换等操作
//求int型的最大数**
System.out.println(Integer.MAX_VALUE);
//把一个字符转大写
char x='a';
System.out.println(Character.toUpperCase(x)); //A
//例子,将 数字转成字符串
90 +"" ;
Integer.toString(90);
//例子,将字符串转成基本数据类型
计算 "44" + "55" =99
int result= Integer.parseInt("44")+Integer.parseInt("55"); //parseInt是静态方法
int a =new Integer("22").intValue(); //也可以
附:如果要转的字符串不符数字规则,则抛出 NumberFormatException
// 进制转换
System.out.println(Integer.toBinaryString(x)); //0b1011010
System.out.println(Integer.toHexString(x)); //0x5a
System.out.println(Integer.toOctalString(x)); //0123
关于拆箱和装箱
装箱:把基本数据类型,转成对象类型
拆箱:把对象类型,转成基本数类型
Integer x=new Integer("100"); //可以
Integer y=new Integer(100); //可以
System.out.println(x==y); //false
System.out.println(x.equals(y)); //true
从 jdk1.5 以后
Integer x=5; //可以,自动装箱 (基本数据类型,转成对象类型,叫装箱)
x=x+2; //可以,自动拆箱,做完加法以后,又自动 装箱
Integer x=null; //可以
Integer a=100;
Integer b=100;
System.out.println(a==b); true 但当 值大于128时,它为false
BigDecimal类的应用
BigDecimal a=new BigDecimal("89149801457809234985932404572309");
BigDecimal b=new BigDecimal("89140345823459735");
System.out.println( a.multiply(b));
它是java.math包下的
Bigdecimal 的构造函数
BigDecimal(int) 创建一个具有参数所指定整数值的对象。
BigDecimal(double) 创建一个具有参数所指定双精度值的对象。
BigDecimal(long) 创建一个具有参数所指定长整数值的对象。
BigDecimal(String) 创建一个具有参数所指定以字符串表示的数值的对象。
常用方法
add(BigDecimal) BigDecimal对象中的值相加,然后返回这个对象。
subtract(BigDecimal) BigDecimal对象中的值相减,然后返回这个对象。
multiply(BigDecimal) BigDecimal对象中的值相乘,然后返回这个对象。
divide(BigDecimal) BigDecimal对象中的值相除,然后返回这个对象。
toString() 将BigDecimal对象的数值转换成字符串。
doubleValue() 将BigDecimal对象中的值以双精度数返回。
floatValue() 将BigDecimal对象中的值以单精度数返回。
longValue() 将BigDecimal对象中的值以长整数返回。
intValue() 将BigDecimal对象中的值以整数返回。 咒
格式化及例子
由于NumberFormat类的format()方法可以使用BigDecimal对象作为其参数,
可以利用BigDecimal对超出16位有效数字的货币值,百分值,以及一般数值进行格式化控制。
以利用BigDecimal对货币和百分比格式化为例。
-- 首先,创建BigDecimal对象,进行BigDecimal的算术运算后,分别建立对货币和百分比格式化的引用,
-- 最后利用BigDecimal对象作为format()方法的参数,输出其格式化的货币值和百分比
符串工具类
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
Java基础——String类(二)的更多相关文章
- Java基础String类
String是一个对象 String不属于8种基本数据类型(byte, char, short, int, float, long, double, boolean),String是对象,所以其默认值 ...
- Java基础—String类小结
一.String类是什么 public final class String implements java.io.Serializable, Comparable<String>, Ch ...
- Java基础——String类(一)
一.String 类代表字符串 Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现. 字符串是常量:它们的值在创建之后不能更改.字符串缓冲区支持可变的字符串 ...
- Java基础---String类和基本数据类型包装类
第一讲 String类 一.概述 String是字符串的类类型,用于描述字符串事物.字符串是一个特殊的对象.特殊之处就在于: Stings= new String();和Str ...
- Java基础:String类详解,案例用户登录实现,案例手机号截取实现,案例敏感词替换实现;StringBuilder类详解,StringBuilder和String相互转换,附练习案例.
1.API 1.1 API概述-帮助文档的使用 什么是API API (Application Programming Interface) :应用程序编程接口 java中的API 指的就是 JDK ...
- [Java基础]——String类
此篇博客主要整理Java中的String类的使用. 一.String 1.1 String 的定义 上图是jdk中对String类的定义,得到的信息有: ①.String类声明为final的, ...
- java基础解析系列(二)---Integer
java基础解析系列(二)---Integer 前言:本系列的主题是平时容易疏忽的知识点,只有基础扎实,在编码的时候才能更注重规范和性能,在出现bug的时候,才能处理更加从容. 目录 java基础解析 ...
- java基础-BigDecimal类常用方法介绍
java基础-BigDecimal类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.BigDecimal类概述 我们知道浮点数的计算结果是未知的.原因是计算机二进制 ...
- java基础-BigInteger类常用方法介绍
java基础-BigInteger类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.BigInteger类概述 Java中long型为最大整数类型,对于超过long ...
随机推荐
- ASP.NET微信公众号用于给指定OpenId用户发送红包
ASP.NET微信公众号用于给指定OpenId用户发送红包 微信公众号要实现对指定用户发送红包,必须指定一个存放兵发放金额的商户号,在微信商户平台里面申请商户号并获取相关参数例如发送红包所要用到的安全 ...
- UWP Button添加圆角阴影(一)
原文:UWP Button添加圆角阴影(一) 众所周知,17763之前的UWP控件,大部分是没有圆角属性的:而阴影也只有17763中的ThemeShadow可以直接在xaml中使用,之前的版本只能用D ...
- 关于css中float的理解
感觉css里的float是个非常神奇的东西,神奇之处在于,你知道它是什么意思,但是用的时候总是不知道怎么实现效果.又或者它会很容易地影响到别的元素和属性.所以今天打算尝试一下float的各种设置,看看 ...
- Linux之IRQ domain
概述 Linux使用IRQ domain来描述一个中断控制器(IRQ Controller)所管理的中断源.换句话说,每个中断控制器都有自己的domain.我们可以将IRQ Domain看作是IRQ ...
- “全栈2019”Java多线程第三十四章:超时自动唤醒被等待的线程
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- Django(ORM查询2)
day70 ORM训练专题 :http://www.cnblogs.com/liwenzhou/articles/8337352.html 内容回顾 1. ORM 1. ORM ...
- 转---谈谈HTTP协议中的短轮询、长轮询、长连接和短连接
作者:伯乐在线专栏作者 - 左潇龙 http://web.jobbole.com/85541/ 如有好文章投稿,请点击 → 这里了解详情 引言 最近刚到公司不到一个月,正处于熟悉项目和源码的阶段,因此 ...
- 分布式管理GIT命令总结(转载)
GIT是个了不起但却复杂的源代码管理系统.它能支持复杂的任务,却因此经常被认为太过复杂而不适用于简单的日常工作.让我们诚实一记吧:Git是复杂的,我们不要装作它不是.但我仍然会试图教会你用(我的)基本 ...
- 容器监控:cadvisor+influxdb+grafana
cAdvisor:Google开源的工具,用于监控Docker主机和容器系统资源,通过图形页面实时显示数据,但不存储:它通过宿主机/proc./sys./var/lib/docker等目录下文件获取宿 ...
- Swift 里 Set(四)Testing for Membership
即contains操作 /// - Parameter member: An element to look for in the set. /// - Returns: `true` if `mem ...