今天做了几道String常见操作。先来几个代码实例:

例一:此方法,仅把字符串前后出现的空格去掉了,中间部分不会。

 1 class TestTrim {
 2     public static void main(String[] args) {
 3         String str = "         这是一   个要            去                 两端    空格    的字符串         ";
 4
 5         str = trim(str);
 6         System.out.println("去完空格以后:" + str);
 7     }
 8
 9     static String trim(String str) {
10
11         int beginIndex = 0;
12         int endIndex = str.length() - 1;
13
14         while (beginIndex <= endIndex) {
15             // 从前往后算空格
16             if (str.charAt(beginIndex) == ' ') {
17                 beginIndex++;
18             } else {
19                 break;
20             }
21         }
22
23         while (beginIndex <= endIndex) {
24             // 从后往前算空格
25             if (str.charAt(endIndex) == ' ') {
26                 endIndex--;
27             } else {
28                 break;
29             }
30         }
31
32         str = str.substring(beginIndex, endIndex + 1);
33         return str;
34     }
35 }

例二:

 1 //字符串翻转
 2 public class TestTrim2 {
 3     public static void main(String[] args) {
 4         String str = "请        把我   翻转   过来                        ";
 5
 6         char[] list = str.toCharArray();
 7
 8         for (int i = 0; i < list.length / 2; i++) {
 9             char temp = ' ';
10
11             temp = list[i];
12             list[i] = list[list.length - 1 - i];
13             list[list.length - 1 - i] = temp;
14         }
15         str = new String(list);
16         System.out.println(str);
17     }
18 }

例三:

 1 //String 常见操作——获取
 2 public class TestTrim3 {
 3     public static void main(String[] args) {
 4         String[] fileList = { "我是中国人", "我热爱我的祖国", "我在自学编程", "我将文件存为.java的形式了",
 5                 "我喜欢.java", "java读起来就很好听", "你喜欢java吗?", "和我一起学习.java",
 6                 "我通常将文件保存在E盘", "文件的名称为XXXX.java", "字节码文件为XXX.class" };
 7
 8         for (int i = 0; i < fileList.length; i++) {
 9             if (fileList[i].startsWith("我") && fileList[i].endsWith(".java")
10                     && fileList[i].contains("中国"))
11                 ;
12             System.out.println("发现:" + fileList[i]);
13         }
14     }
15
16 }

例四:

 1 public class TestTrim4 {
 2     public static void main(String[] args) {
 3         StringBuffer buff = new StringBuffer();
 4         buff.append("第一句话");
 5
 6         StringBuffer buff2 = buff;
 7         buff2.append("这是第二句话");
 8
 9         System.out.println(buff);
10         System.out.println(buff2);
11     }
12 }

例五&例六:

 1 //探讨StringBuffer的效率问题
 2 public class TestTrim5 {
 3     public static void main(String[] args) {
 4         // 设置一个得到当前时间,来进行效率测试,以毫秒为单位。
 5         long begin = System.currentTimeMillis();
 6
 7         String str = "";//下面沒有打印,有個小小的報錯,但不影響的
 8         for (int i = 0; i < 50000; i++) {
 9             str += i;
10         }
11         long end = System.currentTimeMillis();
12
13         System.out.println("程序运行了" + (end - begin) + "毫秒");
14         //System.out.println(str);為了測試,這個地方就不打印了,等全部打印出來就太慢了
15     }
16 }

 1 //用StringBuffer测试效率
 2 public class TestTrim6 {
 3     public static void main(String[] args) {
 4
 5         long begin = System.currentTimeMillis();
 6
 7         StringBuffer buff = new StringBuffer();
 8         for (int i = 0; i < 50000; i++) {
 9             buff.append(i);
10         }
11
12         long end = System.currentTimeMillis();
13
14         System.out.println("程序一共执行了" + (end - begin) + "毫秒");
15     }
16 }

在例五和例六中,可以从打印方式去思考,为什么例六要不例五速度快那么多。

例五的执行方式就好比:

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;

转载于:https://www.cnblogs.com/1693977889zz/p/7060977.html

Java基础——String类(二)相关推荐

  1. Java基础——String类(一)

    一.String 类代表字符串 Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现. 字符串是常量:它们的值在创建之后不能更改.字符串缓冲区支持可变的字符串 ...

  2. JAVA基础--String类

    一.字符串的几种构造方式 二.字符串的常量池 三.字符串比较函数 俩个字符串比较函数 1.public boolean eauals (Object obj); 注意:尽量在比较时,以常量调用方法,& ...

  3. Java基础String类-字符串反转

    定义一个方法,实现字符串反转 键盘录入一个字符串,调用该方法后,在控制台输出结果 例如,键盘录入abc,输出结果cba 示例代码: public class HomeworkTest03 {publi ...

  4. Java基础--String类底层实现原理及API示例详解

  5. Java基础18-String类【String类的特点对象个数常用方法】【超详细讲解】

    Java基础-String类[超详细讲解] String类的特点 String在java.lang.String包中 1:特点 (1)String类型不能被继承,因为由final修饰 (2)Strin ...

  6. Java基础知识(二)(Object类的常用方法、日期时间类、System类、StringBuilder类、包装类、Collection集合、Iterator迭代器、泛型、list集Set接口...)

    文章目录 Java基础知识(二) 1.Object类的常用方法 1.1 toString方法 1.2 equals方法 1.3 Objects类 2.日期时间类 2.1 Date类 2.2 DateF ...

  7. Java基础|1-07-Object类与常见API(二)@API篇

    写在前面: 此系列文是笔者在学习Java系列课程的过程中,参考相关课件.视频讲解.课程代码,并结合一些文档.思维导图及个人理解,对所学内容做的阶段性梳理与总结. 写于:2021年1月28日 内容:Ja ...

  8. Java基础-Date类常用方法介绍

    Java基础-Date类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.毫秒值概念 我们在查阅Date类的API文档时,会发现这样的一句话:"The cl ...

  9. java基础-BigDecimal类常用方法介绍

    java基础-BigDecimal类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.BigDecimal类概述 我们知道浮点数的计算结果是未知的.原因是计算机二进制 ...

最新文章

  1. FilteredTextBoxExtender
  2. oracle bulk collect
  3. python3 - 元组、集合
  4. 【架构】阿里中台内容整理(部分)
  5. 【BZOJ 2753】 2753: [SCOI2012]滑雪与时间胶囊 (分层最小树形图,MST)
  6. 下载cx oracle 6,在Centos 6上安装cx_Oracle
  7. (20)FPGA多路选择器设计(第4天)
  8. java i= i_java中 i!=i+1?你错了。 | 学步园
  9. HTML5 动态统计表
  10. 城市大数据及开放数据索引
  11. apache php gd,lanp(linux+apache+gd库+php)的安装
  12. 关于VMware: vmw_ioctl_command error Invalid argument.解决办法
  13. 实用工具(锐捷睿易篇)
  14. 如何在互联网上虚度人生?
  15. 快端午了,用Python画一盘粽子送给你
  16. SSH密码暴力破解及防御实战
  17. NLP中<SOS>、<EOS>、<UNK>、<PAD>等标识符的含义
  18. 关于docker容器启动后修改或添加端口
  19. JavaScript学习记录七
  20. rtt 在STM32F767上实现虚拟串口的问题

热门文章

  1. ylbtech-LanguageSamples-Struct(结构)
  2. 小学徒进阶系列—JVM对String的处理
  3. JEE_Ajax技术
  4. WordPress免费精美主题分享系列之艺术风格篇
  5. 电子助力方向机控制模块_【技师投稿】使用道通MS908PRO更换宝马F20底盘方向机...
  6. java扶贫,基于jsp的扶贫网站-JavaEE实现扶贫网站 - java项目源码
  7. python 3.5.2页面_笔者操作win10系统搭建Python 3.5.2开发环境的详细方案
  8. 文本分类训练集 测试集_【AI1000问】训练为什么要分测试集和验证集?
  9. attention机制_聊聊NLP中的Attention机制---抛砖引玉
  10. glassfish启动后不能进入部署页面_Flink on Yarn三部曲之二:部署和设置