基于文本的应用
程序交互的几种方式
程序在运行的时候,我们要给程序输入数据,程序根据输入的数据作出响应。
常见的输入方式有:
n 命令行参数
n 系统属性
n 标准的输入
n 在程序中实现文件的创建,读,写
常用类方法说明
Math类是用来支持数学计算的,它打包在java.lang包中,包含一组静态方法和两个常数,是终态(final)的,它不能被实例化。它主要包括下列方法:
分割
int ceil(double d):返回不小于d的最小整数。
int floor(double d):返回不大于d的最大整数。
int round(float f) :返回最接近f的整数(int)。
long round(double d) :返回最接近d的整数(long)。
极值、绝对值
double abs(double d):返回d的绝对值。对于float,int,long有类似的函数。
double min(double d1, double d2) :返回d1与d2中的小者。对于float,int,long有类似的函数。
double max(double d1, double d2) :返回d1与d2中的大者。对于float,int,long有类似的函数。
三角函数
double sin(double d):返回d正弦。对于余弦和正切有类似的函数cosine,tangent。
double asin(double d):返回d反正弦。对于反余弦和反正切有类似的函数acos,atan。
double toDegrees(double r):将弧度换算成度。
double toRadians(double d):将度换算成弧度。
对数、指数
double log(double d):返回d的自然对数。
double exp(double d):返回以e为底的指数。
其它函数
double sqrt(double d):返回d的平方根。
double pow(double d1, double d2):返回d1的d2次幂。
double random():返回0 至 1 的随机数。
常数
PI:圆周率,double。
E:自然对数的底,double。
String的方法
String concat(String s):返回一个新的String,即,在原来的String后面追加上s。
String replace(String old, String new):返回一个新的String,将原来的String中的old替换成new。
String substring(int start, int end):返回一个新的String,它是原来的String中从start到end的一部分。
String toLowerCase():返回一个新的String,它将原来的String中的大写字母变成小写。
String toUpperCase():返回一个新的String,它将原来的String中的小写字母变成大写。
查找方法
boolean endsWith(String s):如果原来的String以s为结尾,则返回true。
boolean startsWith(String s) :如果原来的String以s为开始,则返回true。
int indexOf(String s):返回String中第一次出现s偏移量。类似有lastindexOf,从串尾开始查找。
int indexOf(int ch):返回String中第一次出现ch偏移量。类似有lastindexOf,从串尾开始查找。
int indexOf(String s, int offset):返回String中从offset开始查找,第一次出现s的偏移量。类似有lastindexOf,从串尾开始查找。
int indexOf(int ch, int offset) 返回String中从offset开始查找,第一次出现ch的偏移量。类似有lastindexOf,从串尾开始查找。
比较方法
boolean equals(String s):如果原String与s逐字符比较都相等,则返回true。
boolean equalsIgnoreCase(String s):如果在忽略大小写的情况下,原String与s逐字符比较都相等,则返回true。
int compareTo(String s):进行词汇比较,如果原String 小于s则返回负数;如果原String 大于s则返回正数;如果原String 等于s则返回零。
其它方法
char charAt(int index):返回index处的字符。
int length():返回String的长度。
正则表示式(Regular expression)
正则表示式的功能是J2SE 1.4之后加入的新功能。String的matches()、replaceAll()等方法,所传入的参数就是正则表示式(Regular expression)的字符串;可以在API文件的 java.util.regex.Pattern 类中找到有关正则表示式的相关信息。
如果您使用String类定义字符串对象,可以使用简易的方法来使用正则表示式,并应用于字符串的比较或替换等方法中,以下先介绍几个简单的正则表示式。
例如一些常用的范围,我们可以使用预先定义的字符类别:
. 表示任一字符
\d 表示 [0-9] 数字
\D 表示 [^0-9] 非数字
\s 表示 [ \t\n\x0B\f\r] 空格符
\S 表示 [^ \t\n\x0B\f\r] 非空格符
\w 表示 [a-zA-Z_0-9] 数字或是英文字
\W 表示 [^a-zA-Z_0-9] 非数字与英文字
. 表示任一字符。例如有一字符串abcdebcadxbc,使用.bc来比对的话,符合的子字符串有abc、ebc、xbc三个。
以上的例子来根据字符比对,您也可以使用「字符类」(Character class)来比较一组字符范围,例如:
[abc] a、b或c
[^abc] 非a、b、c的其它字符
[a-zA-Z] a到z或A到Z(范围)
[a-d[m-p]] a到d或m到p(联集)
[a-z&&[def]] d、e或f(交集)
[a-z&&[^bc]] a到z,除了b与c之外(差集)
[a-z&&[^m-p]] a到z且没有m到p(a-lq-z)(差集)
可以指定字符可能出现的次数:
X? X出现一次或完全没有
X* X出现零次或多次
X+ X出现一次或多次
X{n} X出现n次
X{n,} X出现至少n次
X{n,m} X出现至少n次,但不超过m次
在String类别中,matches()方法可以让您验证字符串是否符合指定的正规表示式,这通常用于验证使用者输入的字符串数据是否正确,例如电话号码格式;replaceAll()方法可以将符合正规表示式的子字符串置换为指定的字符串;split()方法可以让您依指定的正规表示式,将符合的子字符串分离出来,并以字符串数组传回。
下面这个程序示范几个正则表示式的应用:
UseRegularExpression.java
import java.util.Scanner;
public class UseRegularExpression {
public static void main(String args[]) {
Scanner scanner = new Scanner(System.in);
String str = "abcdefgabcabc";
System.out.println(str.replaceAll(".bc", "###"));
System.out.print("输入手机号码: ");
str = scanner.next(); // 简单格式验证
if (str.matches("[0-9]{4}-[0-9]{6}"))
System.out.println("格式正确");
else
System.out.println("格式错误");
System.out.print("输入href标签: ");
// Scanner的next()方法是以空白为区隔
// 我们的输入有空白,所以要执行两次
str = scanner.next() + " " + scanner.next();
// 验证href标签
if (str.matches("<a.+href*=*['\"]?.*?['\"]?.*?>"))
System.out.println("格式正确");
else
System.out.println("格式错误");
System.out.print("输入电子邮件: ");
str = scanner.next();
// 验证电子邮件格式
if (str.matches("^[_a-z0-9-]+([.][_a-z0-9-]+)*@[a-z0-9-]+([.][a-z0-9-]+)*$"))
System.out.println("格式正确");
else
System.out.println("格式错误");
}
}
执行结果:
StringBuffer类
StringBuffer对象是一个可以改变的统一编码字符串。String与StringBuffer之间没有继承关系。
构造函数
StringBuffer():创建一个空的StringBuffer。
StringBuffer(int capacity) :创建一个空的StringBuffer,容量是capacity。
StringBuffer(String initialString) :创建一个StringBuffer,其内容是initialString。
修改方法
StringBuffer append(String s):在原来的StringBuffer后面追加上s。对于下列参数类型有重载的方法:
boolean,char,char[],double,float,int,long,Object。
StringBuffer insert(int offset, String s):在原来的StringBuffer的offset处插入s。对于下列参数类型有重载的方法:boolean, char, char[], double, float, int, long, Object。
StringBuffer reverse():颠倒原StringBuffer中字符的顺序。
void setCharAt(int index, char ch):将StringBuffer中的index处设为ch。
void setlength(int newLength):设定StringBuffer的长度。
另外,在JDK5.0中新加入了StringBuilder类,它类似于StringBuffer类,只是该类的方法是非线程安全的;因此在不需要考虑线程安全时可以考虑这个类替换StringBuffer类。
StringBuffer与String的区别
主要是效率上的区别。它们都可以表示一个字符串对象,只不过String类型的字符串对象,只要值改变,存储的空间也会改变,而StringBuffer是在原来的空间上进行修改的。所以要进行大量的字符串操作,要用StringBuffer.
而如果不是频繁操作字符串对象,两者都可以,只不过String 更方便些,因为用两个双引号就可以表示一个Sting对象。
程序交互的几种方式
程序在运行的时候,我们要给程序输入数据,程序根据输入的数据作出响应。
常见的输入方式有:
n 命令行参数
n 系统属性
n 标准的输入
n 在程序中实现文件的创建,读,写
常用类方法说明
Math类是用来支持数学计算的,它打包在java.lang包中,包含一组静态方法和两个常数,是终态(final)的,它不能被实例化。它主要包括下列方法:
分割
int ceil(double d):返回不小于d的最小整数。
int floor(double d):返回不大于d的最大整数。
int round(float f) :返回最接近f的整数(int)。
long round(double d) :返回最接近d的整数(long)。
极值、绝对值
double abs(double d):返回d的绝对值。对于float,int,long有类似的函数。
double min(double d1, double d2) :返回d1与d2中的小者。对于float,int,long有类似的函数。
double max(double d1, double d2) :返回d1与d2中的大者。对于float,int,long有类似的函数。
三角函数
double sin(double d):返回d正弦。对于余弦和正切有类似的函数cosine,tangent。
double asin(double d):返回d反正弦。对于反余弦和反正切有类似的函数acos,atan。
double toDegrees(double r):将弧度换算成度。
double toRadians(double d):将度换算成弧度。
对数、指数
double log(double d):返回d的自然对数。
double exp(double d):返回以e为底的指数。
其它函数
double sqrt(double d):返回d的平方根。
double pow(double d1, double d2):返回d1的d2次幂。
double random():返回0 至 1 的随机数。
常数
PI:圆周率,double。
E:自然对数的底,double。
String的方法
String concat(String s):返回一个新的String,即,在原来的String后面追加上s。
String replace(String old, String new):返回一个新的String,将原来的String中的old替换成new。
String substring(int start, int end):返回一个新的String,它是原来的String中从start到end的一部分。
String toLowerCase():返回一个新的String,它将原来的String中的大写字母变成小写。
String toUpperCase():返回一个新的String,它将原来的String中的小写字母变成大写。
查找方法
boolean endsWith(String s):如果原来的String以s为结尾,则返回true。
boolean startsWith(String s) :如果原来的String以s为开始,则返回true。
int indexOf(String s):返回String中第一次出现s偏移量。类似有lastindexOf,从串尾开始查找。
int indexOf(int ch):返回String中第一次出现ch偏移量。类似有lastindexOf,从串尾开始查找。
int indexOf(String s, int offset):返回String中从offset开始查找,第一次出现s的偏移量。类似有lastindexOf,从串尾开始查找。
int indexOf(int ch, int offset) 返回String中从offset开始查找,第一次出现ch的偏移量。类似有lastindexOf,从串尾开始查找。
比较方法
boolean equals(String s):如果原String与s逐字符比较都相等,则返回true。
boolean equalsIgnoreCase(String s):如果在忽略大小写的情况下,原String与s逐字符比较都相等,则返回true。
int compareTo(String s):进行词汇比较,如果原String 小于s则返回负数;如果原String 大于s则返回正数;如果原String 等于s则返回零。
其它方法
char charAt(int index):返回index处的字符。
int length():返回String的长度。
正则表示式(Regular expression)
正则表示式的功能是J2SE 1.4之后加入的新功能。String的matches()、replaceAll()等方法,所传入的参数就是正则表示式(Regular expression)的字符串;可以在API文件的 java.util.regex.Pattern 类中找到有关正则表示式的相关信息。
如果您使用String类定义字符串对象,可以使用简易的方法来使用正则表示式,并应用于字符串的比较或替换等方法中,以下先介绍几个简单的正则表示式。
例如一些常用的范围,我们可以使用预先定义的字符类别:
. 表示任一字符
\d 表示 [0-9] 数字
\D 表示 [^0-9] 非数字
\s 表示 [ \t\n\x0B\f\r] 空格符
\S 表示 [^ \t\n\x0B\f\r] 非空格符
\w 表示 [a-zA-Z_0-9] 数字或是英文字
\W 表示 [^a-zA-Z_0-9] 非数字与英文字
. 表示任一字符。例如有一字符串abcdebcadxbc,使用.bc来比对的话,符合的子字符串有abc、ebc、xbc三个。
以上的例子来根据字符比对,您也可以使用「字符类」(Character class)来比较一组字符范围,例如:
[abc] a、b或c
[^abc] 非a、b、c的其它字符
[a-zA-Z] a到z或A到Z(范围)
[a-d[m-p]] a到d或m到p(联集)
[a-z&&[def]] d、e或f(交集)
[a-z&&[^bc]] a到z,除了b与c之外(差集)
[a-z&&[^m-p]] a到z且没有m到p(a-lq-z)(差集)
可以指定字符可能出现的次数:
X? X出现一次或完全没有
X* X出现零次或多次
X+ X出现一次或多次
X{n} X出现n次
X{n,} X出现至少n次
X{n,m} X出现至少n次,但不超过m次
在String类别中,matches()方法可以让您验证字符串是否符合指定的正规表示式,这通常用于验证使用者输入的字符串数据是否正确,例如电话号码格式;replaceAll()方法可以将符合正规表示式的子字符串置换为指定的字符串;split()方法可以让您依指定的正规表示式,将符合的子字符串分离出来,并以字符串数组传回。
下面这个程序示范几个正则表示式的应用:
UseRegularExpression.java
import java.util.Scanner;
public class UseRegularExpression {
public static void main(String args[]) {
Scanner scanner = new Scanner(System.in);
String str = "abcdefgabcabc";
System.out.println(str.replaceAll(".bc", "###"));
System.out.print("输入手机号码: ");
str = scanner.next(); // 简单格式验证
if (str.matches("[0-9]{4}-[0-9]{6}"))
System.out.println("格式正确");
else
System.out.println("格式错误");
System.out.print("输入href标签: ");
// Scanner的next()方法是以空白为区隔
// 我们的输入有空白,所以要执行两次
str = scanner.next() + " " + scanner.next();
// 验证href标签
if (str.matches("<a.+href*=*['\"]?.*?['\"]?.*?>"))
System.out.println("格式正确");
else
System.out.println("格式错误");
System.out.print("输入电子邮件: ");
str = scanner.next();
// 验证电子邮件格式
if (str.matches("^[_a-z0-9-]+([.][_a-z0-9-]+)*@[a-z0-9-]+([.][a-z0-9-]+)*$"))
System.out.println("格式正确");
else
System.out.println("格式错误");
}
}
执行结果:
StringBuffer类
StringBuffer对象是一个可以改变的统一编码字符串。String与StringBuffer之间没有继承关系。
构造函数
StringBuffer():创建一个空的StringBuffer。
StringBuffer(int capacity) :创建一个空的StringBuffer,容量是capacity。
StringBuffer(String initialString) :创建一个StringBuffer,其内容是initialString。
修改方法
StringBuffer append(String s):在原来的StringBuffer后面追加上s。对于下列参数类型有重载的方法:
boolean,char,char[],double,float,int,long,Object。
StringBuffer insert(int offset, String s):在原来的StringBuffer的offset处插入s。对于下列参数类型有重载的方法:boolean, char, char[], double, float, int, long, Object。
StringBuffer reverse():颠倒原StringBuffer中字符的顺序。
void setCharAt(int index, char ch):将StringBuffer中的index处设为ch。
void setlength(int newLength):设定StringBuffer的长度。
另外,在JDK5.0中新加入了StringBuilder类,它类似于StringBuffer类,只是该类的方法是非线程安全的;因此在不需要考虑线程安全时可以考虑这个类替换StringBuffer类。
StringBuffer与String的区别
主要是效率上的区别。它们都可以表示一个字符串对象,只不过String类型的字符串对象,只要值改变,存储的空间也会改变,而StringBuffer是在原来的空间上进行修改的。所以要进行大量的字符串操作,要用StringBuffer.
而如果不是频繁操作字符串对象,两者都可以,只不过String 更方便些,因为用两个双引号就可以表示一个Sting对象。
你的优秀和我的人生无关!!!!
我要过的,是属于我自己的生活~~~