JAVA语言中数字、字符和字符串处理
前言:
JAVA语言中针对数字、数学运算、字符、字符串有专门的类,分别是Number、Math、Character和String.
1.数字:
JAVA对数字处理的相关方法被封装在java.lang包中.
1-1.Numbers数字包装器类(wrapper):
JAVA平台为每一个原始数据类型提供了"包装器(wrapper)类".这些包装器类负责把原始数据包装成对象.
Numbers数字包装器类有:Byte、Short、Integer、Long、Float、Double.通俗点讲,就是说,我们要定义一个
原始数据时,可以把它用包装器去定义成一个对象.这样除了我们定义的原始数据本身之外,JAVA还为我们添加
了一些默认的"服务"--这种服务通常是对这个原始数据比较常用的操作方法,比如数字和字符之间的转换.下
面给出两个示例,它们的输出结果是一样的,只是对原始数据的定义方式不一样.示例一是int类型,示例二是Integer
对象.
示例一:
public class IntegerApp
{public static void main(String[] args){int x,y;x = 17;y = 25;System.out.println(x + y);}
}
示例二:
public class IntegerApp
{public static void main(String[] args){Integer x,y;x = 17;y = 25;System.out.println(x + y);}
}
1-2.数字的格式化输出:
上述中我们通过函数print()和println()将字符打印到标准的输出终端(System.out).对于输出有关数字时,
比如说按16进制输出等动作,JAVA为这些个性化操作定制了很好的类及方法来帮助我们实现个性化操作.这
些类及操作方法被封装在java.io包里面PrintStream类,这个类下的两个方法:format()和printf()可以帮我们实
现数字的个性化输出.下面给出一个示例:
示例三:
import java.util.Calendar;
import java.util.Locale;public class TestFormat {public static void main(String[] args) {long n = 382112;System.out.format("%d%n", n);System.out.format("%08d%n", n);System.out.format("%+8d%n", n);System.out.format("%,8d%n", n);System.out.format("%+,8d%n%n", n);double pi = Math.PI;System.out.format("%f%n", pi);System.out.format("%.3f%n", pi);System.out.format("%10.3f%n", pi);System.out.format("%-10.3f%n", pi);System.out.format(Locale.FRANCE,"%-10.4f%n%n", pi);Calendar c = Calendar.getInstance();System.out.format("%tB %te, %tY%n", c, c, c);System.out.format("%tl:%tM %tp%n", c, c, c);System.out.format("%tD%n", c);}
}
输出结果:
382112
00382112+382112382,112
+382,1123.141593
3.1423.142
3.142
3,1416 June 16, 2013
1:44 pm
06/16/13
1-3.更精准地控制输出数字的格式
更精准地控制输出数字的格式,比如控制数字开头和结尾的0、前缀后缀、千分位分隔符、十进制分隔符等显示.
JAVA平台提供了java.text.DecimalFormat类来帮助实现这些操作.如下面的示例四:
示例四:
import java.text.*;
public class DecimalFormatDemo {static public void customFormat(String pattern, double value ) {DecimalFormat myFormatter = new DecimalFormat(pattern);String output = myFormatter.format(value);System.out.println(value + " " + pattern + " " + output);}static public void main(String[] args) {customFormat("###,###.###", 1123456.7891);customFormat("###.##", 123456.789);customFormat("00.000", 123.78);customFormat("$###,###.###", 12345.67);}
}
输出结果:
1123456.7891 ###,###.### 1,123,456.789
123456.789 ###.## 123456.79
123.78 00.000 123.780
12345.67 $###,###.### $12,345.67
下面对输出结果作简要分析:
1).符号#表示一个数字;
2).逗号用于千分位的一个占位符;
3).字符0和字符#一样,充当占位符.
1123456.7891被要求用"###,###.###"格式(pattern)输出:DecimalFormat()类会根据这个pattern实现处理输出.根据这个pattern,DecimalFormat()类就知道了:
1).千分位要用逗号隔开;
2).千分位以上要完全保留(而不是因为有三个"#"而只保留三个有效数字),不能导致数据丢失;小数点后面保留三位数,被丢弃位按四舍五入的原则来取舍.
因此,输出结果为:1,123,456.789
第二个分析和第一个同理;
123.78被要求用"00.000"格式(pattern)输出.DecimalFormat()类会根据这个pattern实现处理输出.根据这个pattern.DecimalFormat()类就知道了:
输出结果用0开头用0结束:当0的位数不够时,保留原有数据,不能因此而导致数据丢失;当0的位数有多的时候,直接补0即可.
因此,输出结果为:
123.780
最后一个输出,小数点后面的"#"比原来的数据要多一个.直接舍弃"#"号.不像符号0要补在输出数据后面.
1-4:Math数学运算处理类
我们在编程中常用的数学运算有加、减、乘、除、除模、求绝对值等运算.这些运算JAVA平台都帮我们实现好了.在java.lang包中的Math类.
Math类中的方法都是静态的,可以直接通过类来进行调用.这个类包括了常用常量和方法.如Math.PI、Math.abs()等.
下面给出一个示例来看一下Math类:
示例五:
public class BasicMathDemo {public static void main(String[] args) {double a = -191.635;double b = 41.94;int c = 27, d = 65;System.out.printf("%.3f abs = %.3f%n", a, Math.abs(a));System.out.printf("Larger Than %.2f Is %.0f.%n", b, Math.ceil(b));System.out.printf("Smaller Than %.2f Is %.0f.%n", b, Math.floor(b));System.out.printf("Most Reach %.2f Is %.0f.%n", b, Math.rint(b));System.out.printf("Between %d And %d,%d Is Larger.%n",c, d, Math.max(c, d));System.out.printf("Between %d And %d,%d Is Smaller.%n",c, d, Math.min(c, d));}
}
输出结果:
-191.635 abs = 191.635
Larger Than 41.94 Is 42.
Smaller Than 41.94 Is 41.
Most Reach 41.94 Is 42.
Between 27 And 65,65 Is Larger.
Between 27 And 65,27 Is Smaller.
相关Math类的方法可参考相关手册.
Math类的方法当然远不止这些,它还包括了求指数、对数、三角函数、随机数等方法.具体可以参考相关Math类的方法手册.
2.字符
字符是指用单引号引起来的单个字母.和C语言一样,JAVA也是用char来表示字符的,不同的是JAVA的一个char占16位
大小的空间(2个字节).
2-1.和上述的数字类相似,JAVA平台对字符处理也有"包装(wrapper)器"类--Character类.也就是说,我们既可以用char去定义
一个字符变量,也可以用Character定义一个字符对象.例如:
Character ch_sex = new Character ('男');
[注:]Charater类是不可变的,所以一旦一个Charater对象被创建,它就不能被改变.
3.字符串类
JAVA平台中,字符串类(String)作为对象来存储.
3-1.定义一个字符串对象:
String 字符串变量名称;
例如,定义一个保存学生姓名的字符串变量如下:
String studentName;
3-2.字符串对象的初始化:
JAVA平台对字符串对象的初始化有三种方式:
3-2-1.使用new运算符,如:
String studentName = new String("张小明");
3-2-2.直接赋初值,如:
String studentName = "张小明";
3-2-3.初始化为null,如:
String studentName = null;
studentName = "张小明";
3-3.字符串对象的方法
当我们定义一个字符串对象时,JAVA平台为我们准备了很多对这个对象操作的方法.比如:
3-3-1.求字符串的长度:length()
String hello = "hello,my name is Jack!";
int len = hello.length();
3-3-2.连接字符串:concat()
String string1 = "hello,";
String string2 = "I am Seven;
String string3 = string1.concat(string2);
当然,实现字符串的连接还可以用符号"+"拼接起来.如:
System.out.println(string1 + string2);
用"+"拼接字符串时,如果存在各种数据类型的运算,按照从左到右进行运算.JAVA会根据"+"运算符
两边的操作数类型来决定进行算术运算还是字符串连接的运算.对比下面的例子:
System.out.println(100 + 32.5 + "RMB"); //算术运算优先
输出:132.5RMB
System.out.println("RMB" + 100 + 32.5); //字符串运算优先
输出:RMB10032.5
3-4.字符串与字符数组转换
字符数组转换为字符串:
char[ ] helloArray = {'h','e','l','l','o','.'};
String helloString = new String(helloArray);
System.out.println(helloString);
字符串转换为字符数组:
String helloString = "hello!";
char[ ] helloArray = helloString.toCharArray();
示例一:toCharArray方法
public class StringToCharDemo{public static void main(String[ ] args){String helloString = "hello!"; //声明一个字符串变量并赋初值char[ ] helloArray = helloString.toCharArray( );//将字符串转换为字符数组for(int i=0;i<helloArray.length;i++){ //循环遍历字符数组,并输出数组当中每一个字符元素System.out.println(helloArray[i]);}}
}
示例二:
// 统计一行字符中字母、数字以及其它字符的个数
public class CountCharDemo{public static void main(String[ ] args){String string1 = "hello,my name is Jack,I am 18 years!";int count1 = 0,count2 = 0,count3 = 0; //分别用来存放字母、数字和其它字符的个数char[ ] charArray = string1.toCharArray( ); //将字符串变量转换为字符数组for(int i=0;i< charArray.length;i++){ //遍历字符数组//判断字符数组中每一个字符元素的类型if(charArray[i]<='z' && charArray[i]>='a' || charArray[i]<='Z' && charArray[i]>='A')count1++; //如果是字母字符,count1增1else if(charArray[i]<='9' && charArray[i]>='0') //如果是数字字符count2++; //计数变量count2增1else //如果既不是字母又不是数字count3++; //计数变量count3增1}System.out.println("含有字母数量:" + count1); //输出字母字符的个数System.out.println("含有数字数量:" + count2); //输出数字字符的个数System.out.println("含有其它字符数量:" + count3); //输出其它字符的个数}
}
3-5.在一个字符串中操作字符
3-5-1.获取指定位置的字符:
String string1 = "Java programming!";
char aChar = string1.charAt(7);
3-5-2.获取指定位置起连续的几个字符:
String string1 = "Java programming!";
char aChar = string1.substring(8.12);
示例一:originalString.split()方法
public class StringMethods{public static void main(String[ ] args){String originalString = "hello,my name is Jack,I am 18 years!";System.out.println("原始字符串为:\"" + originalString + "\"");String[ ] splitedString = originalString.split(","); //使用逗号分隔符拆分字符串System.out.print("按逗号(,)分隔以后的字符串数组元素为:");for(int i=0;i<splitedString.length;i++){ //循环输出拆分后的字符串中的元素System.out.print("[" + splitedString[i] + "]");}System.out.println();splitedString = originalString.split("m"); //使用字符’m’拆分字符串System.out.print("按字母'm'分隔以后的字符串数组元素为:");for(int i=0;i<splitedString.length;i++){ //循环输出拆分后的字符串中的元素System.out.print("[" + splitedString[i] + "]");}System.out.println();System.out.print("原始字符串从第2个到第5个的字符序列为:");System.out.println("\"" + originalString.subSequence(2,6) + "\"");//输出子字符串System.out.print("原始字符串转换为大写字母以后:");System.out.println("\"" + originalString.toUpperCase() + "\""); //将原字符串全部转换为大写System.out.print("原始字符串转换为小写字母以后:");System.out.println("\"" + originalString.toLowerCase() + "\""); //将原字符串全部转换为小写}
}
JAVA平台为字符串对象提供了很多操作方法.如分隔字符串、清除字符空格、查找子字符串、替换子字符串、
比较子字符串等.详细可参考相关手册.
4.StringBuilder类
StringBuilder类可以实现字符串内容和容量的动态修改.
4-1.StringBuilder类和String类的区别:
1).本质特性:
String对象长度固定、内容不可修改;
StringBuilder对象可以实现字符串内容和容量的动态修改.
2).内存开销:
String是不可变对象,每次对String类型改变的时候都相当于生成一个新的String对象,然后将指针指向新对象;
StringBuilder是可变的,每次对其修改都是操作其本身.
小结:
一般情况下推荐使用StringBuilder类型,尤其字符串对象频繁改动的情况下,这样可以使代码执行效率大大提高.
4-2.StringBuilder类常用的操作方法:
append():追加字符;
toString():把StringBuilder类型转换为String类型;
相关方法参考API手册.下面给出两个示例:
示例一:
public class StringDemo {public static void main(String[] args) {String palindrome = "香莲碧水动风凉 水动风凉夏日长";int len = palindrome.length(); //获得字符串对象的长度char[] tempCharArray = new char[len]; //创建字符数组char[] charArray = new char[len]; //创建字符数组//将原始字符串中的字符放到字符数组中for (int i = 0; i < len; i++) {tempCharArray[i] = palindrome.charAt(i);} // 反转字符数组中的字符for (int j = 0; j < len; j++) {charArray[j] = tempCharArray[len - 1 - j];}String reversePalindrome = new String(charArray); //使用反转后的字符数组创建新的字符串System.out.println(palindrome);System.out.println(reversePalindrome);}
}
示例二:
public class StringBuilderDemo {public static void main(String[] args) {String palindrome = "香莲碧水动风凉 水动风凉夏日长"; StringBuilder sb = new StringBuilder(palindrome); //创建StringBuilder对象sb.reverse(); //翻转字符串 System.out.println(palindrome);System.out.println(sb);}
}
JAVA语言中数字、字符和字符串处理相关推荐
- Go语言中的字符和字符串
Go语言中的字符 在Go语言中,没有字符类型,字符类型是rune类型,rune是int32的别称. 下面用一个简单的程序来演示字符类型: package mainimport ("fmt&q ...
- C语言中的字符和字符串
C语言在中常常出现字符和字符串,而一串字符或者字符串其实就是数组 字符数组的定义 char arr[]={'h','e','l','l','o','\0'}; 而定义字符串: char arr1[]= ...
- Java语言中一个字符占几个字节?
要区分清楚内码(internal encoding)和外码(external encoding)就好了. 内码是程序内部使用的字符编码,特别是某种语言实现其char或String类型在内存里用的内部编 ...
- C语言中的字符与字符串库函数的使用以及模拟实现
目录 一.求字符串长度 1.strlen库函数如何使用? 2.如何模拟实现strlen函数 二.长度不受限制的字符串函数 1.库函数 strcpy 如何使用? 2.如何模拟实现 strcpy 函数? ...
- 查找字符串中指定字符的位置c语言,C语言中查找字符在字符串中出现的位置的方法...
C语言strchr()函数:查找某字符在字符串中首次出现的位置 头文件:#include strchr() 用来查找某字符在字符串中首次出现的位置,其原型为: char * strchr (const ...
- Java 语言中一个字符占几个字节?
Java基本数据类型 类型 大小 范围/精度 byte 1字节 8位,最小值是 -128(-2^7): 最大值是 127(2^7-1) short 2字节 16位,最小值是 -32768(-2^15) ...
- C语言中的字符函数和字符串函数
目录 前言 1.常用函数介绍 1.1 strlen 1.2 stycpy 1.3 strcat 1.4 strcmp 1.5 strncpy 1.6 strncat 1.7 strncmp 1.8 s ...
- java中的字符,字符串,数字之间的转换(亲测)
string 和int之间的转换 string转换成int :Integer.valueOf("12") int转换成string : String.valueOf(12) ch ...
- java中的字符,字符串,数字之间的转换
java中的字符,字符串,数字之间的转换 string 和int之间的转换 string转换成int :Integer.valueOf(" ") int转换成string : St ...
最新文章
- 里程碑!SpaceX 载人首飞发射成功,马斯克填补美国载人飞行近十年空白
- 移动端html模板卡片列表效果,移动手机Material Design风格信息卡片UI设计
- Android 实现网页账号自动登录
- hibernate关联关系(一对多)
- 要离开苏州,一大堆东西要处理(包括租的房子)
- 初等数论--原根--a^k对模m的阶
- 斑马技术发布《2022年中国医院愿景研究》:未来5年,超过90%的临床医生将采用移动技术...
- 联海网站开发-操作说明-会员系统及诵读之星
- docker 搭建Tomcat web 简单示例过程
- linux vim debugger,Vim 调试:termdebug 入门
- 网线主管(信息学奥赛一本通-T1242)
- centos7下安装mysql及测试centos_CentOS7安装mysql8
- php框架 swoop_PHP Form Validation
- 太赞了!智能语音技术年终报告:谢磊教授、王赟博士、罗艺博士…
- 关于CRM库存初始化的一点小总结
- strcmp函数php,php strcmp函数怎么用?
- 数据库事务特性学习笔记
- 动态路由协议之OSPF基本原理、区域划分及配置
- nomachine NX 远程连接相关问题
- 服务器上的文件都变成只读了,[求助]Excel 文档都变成只读了,请问怎么恢复?/excle变成只读文件怎么办...