在有些需求当中我们需要抓取字段并且填充到excel表格里面,最后将excel表格转换成pdf格式进行输出,我第一次接触这个需求时,碰到几个比较棘手的问题,现在一一列出并且提供解决方案。
java常用类的使用方法
1:excel转pdf出现乱码:
Interger:整数类型
第一次excel转pdf是成功的,第二次开始后面皆是乱码,是因为我的pdf转excel方法出现的问题,解决办法是采用java自身底层的方法(详见下方代码)。
1、属性。
public static boolean getLicense()
{
boolean result = false;
try {
InputStream is =
Thread.currentThread().getContextClassLoader()
.getResourceAsStream(“license.xml”); //
license.xml应放在..\WebRoot\WEB-INF\classes路径下
License aposeLic = new
License();
aposeLic.setLicense(is);
result = true;
} catch (Exception e)
{
e.printStackTrace();
}
return result;
}
public static void
excelTransferPdf(String excelPath,String pdfPath) {
if (!getLicense()) {
System.out.println(“license
faile”);
return;
}
try {
Workbook wb = new
Workbook(excelPath);
FileOutputStream fileOS = new
FileOutputStream(new File(pdfPath));
wb.save(fileOS,
com.aspose.cells.SaveFormat.PDF);
fileOS.close();
} catch (Exception e) {
e.printStackTrace();
}
}
static int MAX_VALUE:返回最大的整型数;
static int MIN_VALUE:返回最小的整型数;
static Class TYPE :返回当前类型。
2:excel转pdf出现折行。
例子:
代码:
System.out.println(“Integer.MAX_VALUE: ” + Integer.MAX_VALUE );
结果为:Integer.MAX_VALUE: 2147483647
excel转pdf出现折行的情况非常常见,因为在程序运行过程中很多字段是抓取的,你无法判断你的excel转成pdf会有几页,所以这个时候你就不要随意设置excel的预览格式,将excel的单元格式设置自动换行。
2、构造函数。
3:抓取字段显示结果不完整:。
Integer(int value) :通过一个int的类型构造对象;
Integer(String s) :通过一个String的类型构造对象;
当你未设置单元格大小而又没有设置单元格自动换行,比如你的A18单元格里面的字段超过了单元格的长度你还没有设置单元格大小而又没有设置单元格自动换行,就将抓取的字段填充在B18单元格里面,那么打印出来的pdf文件A18单元格超出单元格外的内容是不予显示的,此时你要么将抓取字段填充在C18单元格内要么将更改A18单元格格式
例子:
代码:
Integer i = new Integer(“1234”);
生成了一个值为1234的Integer对象。
4:excel转PDF字段内容无故中间部分换行:
3、方法。
说明:
这是我碰到的最坑的一个地方,这个时候你只需要在excel单元格里面设置自动换行即可,无需代码强行自动换行(强行换行有可能只出现多行数据只显示一行)。同时你需要如下代码:
- 所有方法均为public;
- 书写格式:〔修饰符〕 <返回类型>
<方法名(〔参数列表〕)>
如:
static int parseInt(String s)
表示:此方法(parseInt)为类方法(static),返回类型为(int),方法所需参数为String类型。
/**
*
得到一个字符串的长度,显示的长度,一个汉字或日韩文长度为1,英文字符长度为0.5
*
* @param String
* s 需要得到长度的字符串
* @return int 得到的字符串长度
*/
public static double getLength(String s) {
double valueLength = 0;
if (s == null) {
return 0;
}
String chinese = “[\u4e00-\u9fa5]”;
//
获取字段值的长度,如果含中文字符,则每个中文字符长度为2,否则为1
for (int i = 0; i < s.length(); i++) {
// 获取一个字符
String temp = s.substring(i, i + 1);
// 判断是否为中文字符
if (temp.matches(chinese)) {
// 中文字符长度为2
valueLength += 2;
} else {
// 其他字符长度为1
valueLength += 1;
}
}
// 进位取整
return Math.ceil(valueLength);
}
/**
* 根据字符串长度获取行高
*
* @param str
* @return
*/
public static Float getRowHeight(String str) {
- byteValue():取得用byte类型表示的整数;
- int compareTo(Integer anotherInteger)
:比较两个整数。相等时返回0;小于时返回负数;大于时返回正数。
Integer lineCount = (int) (getLength(str) / 64) + 1;
if (str.contains(“\n”)) {
Integer tempLineCount = 1;
String[] lines = str.split(“\n”);
for (String line : lines) {
Integer everyLineCount = (int) (getLength(line) / 64) +
1;
tempLineCount += everyLineCount;
}
lineCount = lineCount >= tempLineCount ? lineCount :
tempLineCount;
}
Float rowHeight = (float) (lineCount * 20);
return rowHeight;
}
例子:
代码:
你需要先获取抓取的字符串的长度,然后通过这个方法计算行高,再将excel需要填充的该行用Java代码设置行高(行高单位是像素),但是如果出现我上面说的字段内容无故中间部分换行,那么你获取的行高就会不足,这个时候你需要改动这个地方—–>>>>Float rowHeight = (float) (lineCount * X);
x的值一定要设置的大一行,以防出现这种情况!
Integer i = new Integer(1234);
System.out.println(“i.compareTo: ” + i.compareTo(new Integer(123)) );
结果为:i.compareTo: 1
- int compareTo(Object o)
:将该整数与其他类进行比较。如果o也为Integer类,进行方法2
的操作;否则,抛出ClassCastException异常。 - static Integer decode(String nm) :将字符串转换为整数。
- double doubleValue() :取得该整数的双精度表示。
- boolean equals(Object obj) :比较两个对象。
- float floatValue() :取得该整数的浮点数表示。
- static Integer getInteger(String nm) :根据指定名确定系统特征值。
- static Integer getInteger(String nm, int val) :上面的重载。
- static Integer getInteger(String nm, Integer val) :上面的重载。
- int hashCode() :返回该整数类型的哈希表码。
- int intValue() : 返回该整型数所表示的整数。
- long longValue() :返回该整型数所表示的长整数。
- static int parseInt(String s)
:将字符串转换成整数。s必须是时进制数组成,否则抛出NumberFormatException异常。 - static int parseInt(String s, int radix)
:以radix为基数radix返回s的十进制数。所谓的基数,就是“几进制”。
例子:
代码:
String s1 = new String(“1010”);
System.out.println(“Integer.parseInt(String s, int radix): ” +
Integer.parseInt(s1,2) );
结果为:Integer.parseInt(String s, int radix): 10
- short shortValue() :返回该整型数所表示的短整数。
- static String toBinaryString(int i) :将整数转为二进制数的字符串。
- static String toHexString(int i) :将整数转为十六进制数的字符串。
- static String toOctalString(int i) :将整数转为八进制数的字符串。
- String toString() :将该整数类型转换为字符串。
- static String toString(int i)
:将该整数类型转换为字符串。不同的是,此为类方法。 - static String toString(int i, int radix)
:将整数i以基数radix的形式转换成字符串。
例子:
代码:
int i1 = 54321;
System.out.println(“Integer.toString(int i, int radix): ” +
Integer.toString(i1,16) );
结果为:Integer.toString(int i, int radix): d431
- static Integer valueOf(String s) :将字符串转换成整数类型。
- static Integer valueOf(String s, int radix)
:将字符串以基数radix的要求转换成整数类型。
Float类的使用方法
Float:实数类型
1、属性。
- static float MAX_VALUE :
返回最大浮点数,在不同硬件平台中由Float.intBitsToFloat(0x7f7fffff)计算得出。 - static float MIN_VALUE :
返回最小浮点数,在不同硬件平台中由Float.intBitsToFloat(0x1)计算得出。 - static float NaN :
表示非数值类型的浮点数,在不同硬件平台中由Float.intBitsToFloat(0x7fc00000)计算得出。 - static float
NEGATIVE_INFINITY:返回负无穷浮点数,在不同硬件平台中由Float.intBitsToFloat(0xff800000)计算得出。 - static float POSITIVE_INFINITY
:返回正无穷浮点数,在不同硬件平台中由Float.intBitsToFloat(0x7f800000)计算得出。 - static Class TYPE :返回当前类型。
2、构造函数。
Float(double value) :以double类型为参数构造Float对象。
Float(float value) :以Float类型为参数构造Float对象。
Float(String s) :以String类型为参数构造Float对象。
3、方法。
说明:
- 所有方法均为public;
- 书写格式:〔修饰符〕 <返回类型>
<方法名(〔参数列表〕)>
如:
static int parseInt(String s)
表示:此方法(parseInt)为类方法(static),返回类型为(int),方法所需参数为String类型。
- byte byteValue() :返回以字节表示的浮点数。
- static int compare(float f1, float f2)
:此为类方法,比较f1和f2。相当于new Float(f1).compareTo(new
Float(f2))。如果f1与f2相等,返回0;小于关系,返回负数;大于关系,返回正数。 - int compareTo(Float anotherFloat)
:此为对象方法,当前对象与anotherFloat比较。与2的比较规则相同。 - int compareTo(Object o)
:当前对象与o进行比较,如果o属于Float类,那么,相当于3;如果是其他类,则抛出ClassCastException异常。 - double doubleValue() :返回浮点数的双精度值。
- boolean equals(Object obj)
:比较当前Float对象与obj的内容是否相同。大多数情况是比较两个Float对象的值是否相等,相当于f1.floatValue()
== f2.floatValue()的值。与2、3、4不同的是:6返回boolean型。 - static int floatToIntBits(float value):按照IEEE
754转化成float并输出它的十进制数值。 - float floatValue() :返回该浮点数对象的浮点数值。
- int hashCode() :返回该Float对象的哈希表码。
- int intValue() :返回该Float对象的整数值(整数部分)。
- boolean isInfinite() :判断该Float对象是否是无穷。
- static boolean isInfinite(float v)
:与11类似,不同的是:此为类方法,判断的是v。 - boolean isNaN() :判断该Float对象是否为非数值。
- static boolean isNaN(float v) :功能与13一样,只不过判断v。
- long longValue() :返回该Float对象的长整数值。
- static float parseFloat(String s) :将字符串转换成浮点数。
- short shortValue() :返回该Float对象的短整数值。
- String toString() :将该Float对象转换成字符串。
- static String toString(float f) :功能与18一样,只是转换f。
- static Float valueOf(String s) :将字符串转换成浮点数。
例子:
代码:
Float f = new Float(1237.45);
Float fs = new Float(“123.45”);
Float fd = new Float(1234146865679824657987947924623724749.16416925);
System.out.println(“f.compare(fs): ” + f.compareTo(fs) );
System.out.println(“f.compareTo(fd): ” + f.compareTo(fd) );
System.out.println(“Float.compare(1.23f,3.25f): ” +
Float.compare(1.23f,3.25f) );
结果为:
f.compare(fs): 1
f.compareTo(fd): -1
Float.compare(1.23f,3.25f): -1
代码:
Float f = new Float(1237.45);
System.out.println(“f.equals(fs): ” + f.equals(fs) );
结果为:f.equals(fs): false
Double类的使用方法
Double:双精度类型
1、属性。
- static Double MAX_VALUE :
返回最大双精度数,在不同硬件平台中由Double.longBitsToDouble(0x7fefffffffffffffL)计算得出。 - static Double MIN_VALUE :
返回最小双精度数,在不同硬件平台中由Double.longBitsToDouble(0x1L)计算得出。 - static Double NaN :
表示非数值类型的双精度数,在不同硬件平台中由Double.longBitsToDouble(0x7ff8000000000000L)计算得出。 - static Double
NEGATIVE_INFINITY:返回负无穷双精度数,在不同硬件平台中由Double.longBitsToDouble(0xfff0000000000000L)计算得出。 - static Double POSITIVE_INFINITY
:返回正无穷双精度数,在不同硬件平台中由Double.longBitsToDouble(0x7ff0000000000000L)计算得出。 - static Class TYPE :返回当前类型。
2、构造函数。
Double(double value) :以double类型为参数创建Double对象。
Double(String s) :以String类型为参数创建String对象。
3、方法。
说明:
- 所有方法均为public;
- 书写格式:〔修饰符〕 <返回类型>
<方法名(〔参数列表〕)>
如:
static int parseInt(String s)
表示:此方法(parseInt)为类方法(static),返回类型为(int),方法所需参数为String类型。
- byte byteValue() :返回以字节表示的双精度数。
- static int compare(double d1, double d2)
:此为类方法,比较d1和d2。相当于new Double(d1).compareTo(new
Double(d2))。如果d1与d2相等,返回0;小于关系,返回负数;大于关系,返回正数。 - int compareTo(Double anotherDouble)
:此为对象方法,当前对象与anotherDouble比较。与2的比较规则相同。 - int compareTo(Object o)
:当前对象与o进行比较,如果o属于Double类,那么,相当于3;如果是其他类,则抛出ClassCastException异常。 - static long doubleToLongBits(double value) :把value按照IEEE
754转化成long并输出它的十进制数值。 - double doubleValue() :返回该双精度数对象的双精度数值。
- boolean equals(Object obj)
:比较当前Double对象与obj的内容是否相同。大多数情况是比较两个Double对象的值是否相等,相当于d1.doubleValue()
== d2.doubleValue()的值。 - float floatValue() :返回该浮点数对象的浮点数值。
- int hashCode() :返回该Double对象的哈希表码。
- int intValue() :返回该Double对象的整数值(整数部分)。
- boolean isInfinite() :判断该Double对象是否是无穷。
- static boolean isInfinite(double v)
:与11类似,不同的是:此为类方法,判断的是v。 - boolean isNaN() :判断该Double对象是否为非数值。
- static boolean isNaN(double v) :功能与13一样,只不过判断v。
- long longValue() :返回该Double对象的长整数值。
- static float parseFloat(String s) :将字符串转换成双精度数。
- short shortValue() :返回该Double对象的短整数值。
- String toString() :将该Double对象转换成字符串。
- static String toString(Double f) :功能与18一样,只是转换f。
- static Double valueOf(String s) :将字符串转换成双精度数。
例子:与Float类的相似。
Character类的使用方法
Character:字符类型
1、属性。
static int MIN_RADIX :返回最小基数。
static int MAX_RADIX :返回最大基数。
static char MAX_VALUE :字符类型的最大值。
static char MIN_VALUE :字符类型的最小值。
static Class TYPE :返回当前类型。
2、构造函数。
Character(char value):以char参数构造一个Character对象。
3、方法。
说明:
- 所有方法均为public;
- 书写格式:〔修饰符〕 <返回类型>
<方法名(〔参数列表〕)>
如:
static int parseInt(String s)
表示:此方法(parseInt)为类方法(static),返回类型为(int),方法所需参数为String类型。
- char charValue() :返回字符对象的值。
- int compareTo(Character anotherCharacter)
:当前Character对象与anotherCharacter比较。相等关系返回0;小于关系返回负数;大于关系返回正数。 - int compareTo(Object o)
:当前对象与另一个对象进行比较。如果o是Character对象,则与2功能一样;否则,抛出ClassCastException异常。 - static int digit(char ch, int radix)
:根据基数返回当前字符的值的十进制。如果不满足Character.MIN_RADIX <=
radix <=
Character.MAX_RADIX,或者,ch不是radix基数中的有效值,返回”-1″;如果ch是“大写”的A到Z之间,则返回ch
- ‘A’ + 10 的值;如果是“小写”a到z之间,返回ch – ‘a’ + 10 的值。
代码:
System.out.println(“Character.MIN_RADIX: ” + Character.MIN_RADIX );
System.out.println(“Character.MAX_RADIX: ” + Character.MAX_RADIX );
System.out.println(“Character.digit(‘2’,2): ” + Character.digit(‘2’,2)
);
System.out.println(“Character.digit(‘7’,10): ” + Character.digit(‘7’,10)
);
System.out.println(“Character.digit(‘F’,16): ” + Character.digit(‘F’,16)
);
结果为:
Character.MIN_RADIX: 2
Character.MAX_RADIX: 36
Character.digit(‘2’,2): -1
Character.digit(‘7’,10): 7
Character.digit(‘F’,16): 15
- boolean equals(Object obj)
:与obj对象比较。当且仅当obj不为“null”并且和当前Character对象一致时返回“true”。 - static char forDigit(int digit, int radix)
:根据特定基数判断当前数值表示的字符。4的逆运算,非法数值时返回“’/u0000’”。
代码:
System.out.println(“Character.MIN_RADIX: ” + Character.MIN_RADIX );
System.out.println(“Character.MAX_RADIX: ” + Character.MAX_RADIX );
System.out.println(“Character.forDigit(2,2): ” + Character.forDigit(2,2)
);
System.out.println(“Character.forDigit(7,10): ” +
Character.forDigit(7,10) );
System.out.println(“Character.forDigit(15,16): ” +
Character.forDigit(15,16) );
结果为:
Character.MIN_RADIX: 2
Character.MAX_RADIX: 36
Character.forDigit(2,2):
Character.forDigit(7,10): 7
Character.forDigit(15,16): f
- static int getNumericValue(char ch) :返回字符ch的数值。
- static int getType(char ch)
:返回字符所属类型。具体有哪些种类请查看Java文档资料。 - int hashCode() :返回当前字符的哈希表码。
- static boolean isDefined(char ch)
:判断字符ch在Unicode字符集是否用明确定义。 - static boolean isDigit(char ch) :判断字符ch是否为数字。
- static boolean isIdentifierIgnorable(char ch)
:判断字符ch是否为Unicode字符集中可忽略的字符。 - static boolean isISOControl(char ch)
:判断字符ch是否为ISO标准中的控制字符。
14.static boolean isJavaIdentifierPart(char ch)
:判断字符ch是否为Java中的部分标识符。 - static boolean isJavaIdentifierStart(char ch)
:判断字符ch是否为Java中的第一个标识符。 - static boolean isLetter(char ch) :判断字符ch是否为字母。
- static boolean isLetterOrDigit(char ch)
:判断字符ch是否为字母或数字。 - static boolean isLowerCase(char ch) :判断字符ch是否为小写字母。
- static boolean isMirrored(char c)
:根据Unicode表判断字符c是否存在与之方向相反的字符。例如:“〔”存在与之方向相反的“〕”,结果为:true。 - static boolean isSpaceChar(char ch)
:判断字符ch是否为Unicode中的空格。 - static boolean isUpperCase(char ch) :判断字符ch是否为大写字母。
-
static boolean isWhitespace(char ch)
:判断字符ch是否为Java定义中的空字符。
代码:
其中包括:
char c1 = ‘/u0009’;//水平列表符
char c2 = ‘/u000A’;//换行
char c3 = ‘/u000B’;//垂直列表符
char c4 = ‘/u000C’;//换页
char c5 = ‘/u000D’;//回车
char c6 = ‘/u001C’;//文件分隔符
char c7 = ‘/u001D’;//组分隔符
char c8 = ‘/u001E’;//记录分隔符
char c9 = ‘/u001F’;//单元分隔符 -
static char toLowerCase(char ch) :转换ch是否为小写。
- String toString() :将当前Character对象转换成字符串。
- static String toString(char c) :此为类方法,将c转换成字符串。
- static char toUpperCase(char ch) :转换ch是否为大写。
代码:
System.out.println(“Character.toUpperCase(‘q’): ” +
Character.toUpperCase(‘q’) );
System.out.println(“Character.toLowerCaseCase(‘B’): ” +
Character.toLowerCase(‘B’) );
结果为:
Character.toUpperCase(‘q’): Q
Character.toLowerCaseCase(‘B’): b
string类的使用方法
String:字符串类型
此帖参考了maxlyy朋友的帖子,在这里特别感谢。
1、构造函数。
String() :构造一个空字符串对象。
String(byte[] bytes) :通过byte数组构造字符串对象。
String(byte[] bytes, int offset, int length)
:通过byte数组,从offset开始,总共length长的字节构造字符串对象。
String(char[] value) :通过char数组构造字符串对象。
String(char[] value, int offset, int count)
:通过char数组,从offset开始,总共length长的字节构造字符串对象。
String(String original)
:构造一个original的副本。既,拷贝一个original。
String(StringBuffer buffer) :通过StringBuffer数组构造字符串对象;
代码:
byte[] b = {‘a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’i’,’j’};
char[] c = {‘0′,’1′,’2′,’3′,’4′,’5′,’6′,’7′,’8′,’9’};
String sb = new String(b);
String sb_sub = new String(b,3,2);
String sc = new String(c);
String sc_sub = new String(c,3,2);
String sb_copy = new String(sb);
System.out.println(“sb: ” + sb );
System.out.println(“sb_sub: ” + sb_sub );
System.out.println(“sc: ” + sc );
System.out.println(“sc_sub: ” + sc_sub );
System.out.println(“sb_copy: ” + sb_copy );
结果为:
sb: abcdefghij
sb_sub: de
sc: 0123456789
sc_sub: 34
sb_copy: abcdefghij
2、方法。
说明:
- 所有方法均为public;
- 书写格式:〔修饰符〕 <返回类型>
<方法名(〔参数列表〕)>
如:
static int parseInt(String s)
表示:此方法(parseInt)为类方法(static),返回类型为(int),方法所需参数为String类型。
- char charAt(int index)
:取字符串中的某一个字符,其中的参数index指的是字符串中序数。字符串的序数从0开始到length()-1
。
代码:
String s = new String(“abcdefghijklmnopqrstuvwxyz”);
System.out.println(“s.charAt(5): ” + s.charAt(5) );
结果为:s.charAt(5): f
- int compareTo(String anotherString)
:当前String对象与anotherString比较。相等关系返回0;不相等时,从两个字符串第0个字符开始比较,返回第一个不相等的字符差,另一种情况,较长字符串的前面部分恰巧是较短的字符串,返回它们的长度差。 - int compareTo(Object o)
:如果o是String对象,和2的功能一样;否则抛出ClassCastException异常。
代码:
String s1 = new String(“abcdefghijklmn”);
String s2 = new String(“abcdefghij”);
String s3 = new String(“abcdefghijalmn”);
System.out.println(“s1.compareTo(s2): ” + s1.compareTo(s2)
);//返回长度差
System.out.println(“s1.compareTo(s3): ” + s1.compareTo(s3)
);//返回’k’-‘a’的差
结果为:
s1.compareTo(s2): 4
s1.compareTo(s3): 10
- String concat(String str) :将该String对象与str连接在一起。
- boolean contentEquals(StringBuffer sb)
:将该String对象与StringBuffer对象sb进行比较。 - static String copyValueOf(char[] data) :
- static String copyValueOf(char[] data, int offset, int count)
:这两个方法将char数组转换成String,与其中一个构造函数类似。 - boolean endsWith(String suffix) :该String对象是否以suffix结尾。
代码:
String s1 = new String(“abcdefghij”);
String s2 = new String(“ghij”);
System.out.println(“s1.endsWith(s2): ” + s1.endsWith(s2) );
结果为:s1.endsWith(s2): true
- boolean equals(Object anObject)
:当anObject不为空并且与当前String对象一样,返回true;否则,返回false。 - byte[] getBytes() :将该String对象转换成byte数组。
- void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
:该方法将字符串拷贝到字符数组中。其中,srcBegin为拷贝的起始位置、srcEnd为拷贝的结束位置、字符串数值dst为目标字符数组、dstBegin为目标字符数组的拷贝起始位置。
代码:
char[] s1 = {‘I’,’ ‘,’l’,’o’,’v’,’e’,’ ‘,’h’,’e’,’r’,’!’};//s1=I
love her!
String s2 = new String(“you!”);
s2.getChars(0,3,s1,7); //s1=I love you!
System.out.println( s1 );
结果为:I love you!
- int hashCode() :返回当前字符的哈希表码。
- int indexOf(int ch) :只找第一个匹配字符位置。
- int indexOf(int ch, int fromIndex)
:从fromIndex开始找第一个匹配字符位置。 - int indexOf(String str) :只找第一个匹配字符串位置。
- int indexOf(String str, int fromIndex)
:从fromIndex开始找第一个匹配字符串位置。
代码:
String s = new String(“write once, run anywhere!”);
String ss = new String(“run”);
System.out.println(“s.indexOf(‘r’): ” + s.indexOf(‘r’) );
System.out.println(“s.indexOf(‘r’,2): ” + s.indexOf(‘r’,2) );
System.out.println(“s.indexOf(ss): ” + s.indexOf(ss) );
结果为:
s.indexOf(‘r’): 1
s.indexOf(‘r’,2): 12
s.indexOf(ss): 12
- int lastIndexOf(int ch)
- int lastIndexOf(int ch, int fromIndex)
- int lastIndexOf(String str)
- int lastIndexOf(String str, int fromIndex)
以上四个方法与13、14、15、16类似,不同的是:找最后一个匹配的内容。 - int length() :返回当前字符串长度。
- String replace(char oldChar, char newChar)
:将字符号串中第一个oldChar替换成newChar。 - boolean startsWith(String prefix) :该String对象是否以prefix开始。
- boolean startsWith(String prefix, int toffset)
:该String对象从toffset位置算起,是否以prefix开始。
代码:
String s = new String(“write once, run anywhere!”);
String ss = new String(“write”);
String sss = new String(“once”);
System.out.println(“s.startsWith(ss): ” + s.startsWith(ss) );
System.out.println(“s.startsWith(sss,6): ” + s.startsWith(sss,6) );
结果为:
s.startsWith(ss): true
s.startsWith(sss,6): true
- String substring(int beginIndex)
:取从beginIndex位置开始到结束的子字符串。
26.String substring(int beginIndex, int endIndex)
:取从beginIndex位置开始到endIndex位置的子字符串。 - char[] toCharArray() :将该String对象转换成char数组。
- String toLowerCase() :将字符串转换成小写。
- String toUpperCase() :将字符串转换成大写。
代码:
String s = new String(“java.lang.Class String”);
System.out.println(“s.toUpperCase(): ” + s.toUpperCase() );
System.out.println(“s.toLowerCase(): ” + s.toLowerCase() );
结果为:
s.toUpperCase(): JAVA.LANG.CLASS STRING
s.toLowerCase(): java.lang.class string
- static String valueOf(boolean b)
- static String valueOf(char c)
- static String valueOf(char[] data)
- static String valueOf(char[] data, int offset, int count)
- static String valueOf(double d)
- static String valueOf(float f)
- static String valueOf(int i)
- static String valueOf(long l)
- static String valueOf(Object obj)
以上方法用于将各种不同类型转换成Java字符型。这些都是类方法。
StringTokenizer类的使用方法
StringTokenizer:字符串分隔解析类型
属于:java.util包。
1、构造函数。
- StringTokenizer(String str)
:构造一个用来解析str的StringTokenizer对象。java默认的分隔符是“空格”、“制表符(‘/t’)”、“换行符(‘/n’)”、“回车符(‘/r’)”。 - StringTokenizer(String str, String delim)
:构造一个用来解析str的StringTokenizer对象,并提供一个指定的分隔符。 - StringTokenizer(String str, String delim, boolean returnDelims)
:构造一个用来解析str的StringTokenizer对象,并提供一个指定的分隔符,同时,指定是否返回分隔符。
2、方法。
说明:
- 所有方法均为public;
- 书写格式:〔修饰符〕 <返回类型>
<方法名(〔参数列表〕)>
如:
static int parseInt(String s)
表示:此方法(parseInt)为类方法(static),返回类型为(int),方法所需参数为String类型。
- int countTokens()
:返回nextToken方法被调用的次数。如果采用构造函数1和2,返回的就是分隔符数量(例2)。 - boolean hasMoreTokens() :返回是否还有分隔符。
- boolean hasMoreElements() :结果同2。
- String nextToken() :返回从当前位置到下一个分隔符的字符串。
- Object nextElement() :结果同4。
- String nextToken(String delim) :与4类似,以, 指定的分隔符返回结果。
例子:
代码:
String s = new String(“The Java platform is the ideal platform for
network computing”);
StringTokenizer st = new StringTokenizer(s);
System.out.println( “Token Total: ” + st.countTokens() );
while( st.hasMoreElements() ){
System.out.println( st.nextToken() );
}
结果为:
Token Total: 10
The
Java
platform
is
the
ideal
platform
for
network
computing
例2:
代码:
String s = new
String(“The=Java=platform=is=the=ideal=platform=for=network=computing”);
StringTokenizer st = new StringTokenizer(s,”=”,true);
System.out.println( “Token Total: ” + st.countTokens() );
while( st.hasMoreElements() ){
System.out.println( st.nextToken() );
}
结果为:
Token Total: 19
The
Java
platform
is
the
ideal
platform
for
network
computing
StringBuffer类的使用方法
StringBuffer:StringBuffer类型
描述:在实际应用中,经常回遇到对字符串进行动态修改。这时候,String类的功能受到限制,而StringBuffer类可以完成字符串的动态添加、插入和替换等操作。
1、构造函数。
StringBuffer() :构造一个没有任何字符的StringBuffer类。
StringBuffer(int length) :
:构造一个没有任何字符的StringBuffer类,并且,其长度为length。
StringBuffer(String str) :以str为初始值构造一个StringBuffer类。
2、方法。
说明:
- 所有方法均为public;
- 书写格式:〔修饰符〕 <返回类型>
<方法名(〔参数列表〕)>
如:
static int parseInt(String s)
表示:此方法(parseInt)为类方法(static),返回类型为(int),方法所需参数为String类型。
- StringBuffer append(boolean b)
- StringBuffer append(char c)
- StringBuffer append(char[] str)
- StringBuffer append(char[] str, int offset, int len)
- StringBuffer append(double d)
- StringBuffer append(float f)
- StringBuffer append(int i)
- StringBuffer append(long l)
- StringBuffer append(Object obj)
- StringBuffer append(String str)
- StringBuffer append(StringBuffer sb)
以上的方法都是向字符串缓冲区“追加”元素,但是,这个“元素”参数可以是布尔量、字符、字符数组、双精度数、浮点数、整型数、长整型数对象类型的字符串、字符串和StringBuffer类等。如果添加的字符超出了字符串缓冲区的长度,Java将自动进行扩充。
代码:
String question = new String(“1+1=”);
int answer = 3;
boolean result = (1+1==3);
StringBuffer sb = new StringBuffer();
sb.append(question);
sb.append(answer);
sb.append(‘/t’);
sb.append(result);
System.out.println(sb);
结果为:
1+1=3 false
- int capacity()
:返回当前StringBuffer对象(字符串缓冲区)的总空间,而非字符号串的长度。 - char charAt(int index)
:在当前StringBuffer对象中取索引号为index的字符。第一个字符的索引为“0” - StringBuffer delete(int start, int end)
:删除当前StringBuffer对象中以索引号start开始,到end结束的子串。 - StringBuffer deleteCharAt(int index)
:删除当前StringBuffer对象中索引号为index的字符。 - void ensureCapacity(int minimumCapacity)
:重新设置字符号串缓冲区的总空间。如果minimumCapacity大于当前的总空间,则新的空间被设置:一种结果是minimumCapacity;另一种结果是{“老空间”乘2加2}。
代码:
StringBuffer sb1 = new StringBuffer(5);
StringBuffer sb2 = new StringBuffer(5);
sb1.ensureCapacity(6);
sb2.ensureCapacity(100);
System.out.println( “sb1.Capacity: ” + sb1.capacity() );
System.out.println( “sb2.Capacity: ” + sb2.capacity() );
结果为:
sb1.Capacity: 12
sb2.Capacity: 100
- void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
:从当前StringBuffer对象的索引号srcBegin开始,到srcEnd结束的子串,赋值到字符数组dst中,并且从dst的索引号dstBegin开始。
代码:
StringBuffer sb = new StringBuffer(“I love her!”);
char[] i = {‘I’,’ ‘,’l’,’o’,’v’,’e’,’ ‘,’y’,’o’,’u’};
sb.getChars(7,10,i,7);
System.out.println( “sb: ” + sb );
结果为:sb: I love her!
- int indexOf(String str)
:返回当前StringBuffer对象中,第一个满足str子串的位置。 - int indexOf(String str, int fromIndex)
:从当前StringBuffer对象的fromIndex开始查找,返回第一个满足str子串的位置。 - StringBuffer insert(int offset, boolean b)
- StringBuffer insert(int offset, char c)
- StringBuffer insert(int offset, char[] str)
- StringBuffer insert(int index, char[] str, int offset, int len)
- StringBuffer insert(int offset, double d)
- StringBuffer insert(int offset, float f)
- StringBuffer insert(int offset, int i)
- StringBuffer insert(int offset, long l)
- StringBuffer insert(int offset, Object obj)
- StringBuffer insert(int offset, String str)
以上的方法都是在当前StringBuffer对象中插入一个元素,在索引号offset处插入相应的值。 - int lastIndexOf(String str)
:返回当前StringBuffer对象中,最后一个满足str子串的位置。 - int lastIndexOf(String str, int fromIndex)
:从当前StringBuffer对象的fromIndex开始查找,返回最后一个满足str子串的位置。 - int length()
:返回当前StringBuffer对象(字符缓冲区)中,字符串的长度。注意:此方法与capacity()
不同。 - StringBuffer replace(int start, int end, String str)
:替换当前StringBuffer对象的字符串。从start开始,到end结束的位置替换成str。 - StringBuffer reverse() :将字符串翻转。
代码:
StringBuffer sb = new StringBuffer(“0123456789”);
System.out.println( “sb.reverse(): ” + sb.reverse() );
结果为:sb.reverse(): 9876543210
- void setCharAt(int index, char ch) :设置索引号index的字符为ch。
- void setLength(int newLength)
:重新设置字符串缓冲区中字符串的长度,如果newLength小于当前的字符串长度,将截去多余的字符。
代码:
StringBuffer sb = new StringBuffer(“0123456789”);
sb.setLength(5);
System.out.println( “sb: ” + sb );
结果为:sb: 01234
- String substring(int start)
:取当前StringBuffer对象中,从start开始到结尾的子串。 - String substring(int start, int end)
:取当前StringBuffer对象中,从start开始到end的子串。 - String toString() :将当前StringBuffer对象转换成String对象。
Random类的使用方法。
属于包:java.util.Random
Random:随机类型
1、属性。
无。
2、构造函数。
Random() :创建一个新的随机数发生器。
Random(long seed) :用一个种子(长整型)创建一个随机数发生器。
3、方法。
说明:
- 所有方法均为public;
- 书写格式:〔修饰符〕 <返回类型>
<方法名(〔参数列表〕)>
如:
static int parseInt(String s)
表示:此方法(parseInt)为类方法(static),返回类型为(int),方法所需参数为String类型。
-
protected int next(int bits) :产生下一个伪随机数。
-
boolean nextBoolean()
:返回下一个从随机发生器的系列中得到的均匀分布的布尔值。 -
void nextBytes(byte[] bytes) :产生随机字节数组放到指定的数组中。
-
double nextDouble()
:返回下一个从随机发生器的系列中得到的均匀分布的0.0到1.0的双精度类型值。 -
float nextFloat()
:返回下一个从随机发生器的系列中得到的均匀分布的0.0到1.0的浮点类型值。 -
double nextGaussian()
:返回下一个从随机发生器的系列中得到的符合均匀分布的0.0的平均数到1.0方差的高斯分布双精度类型值。 -
int nextInt()
:返回下一个从随机发生器的系列中得到的均匀分布的整型值。 -
int nextInt(int n)
:返回下一个从随机发生器的系列中得到的均匀分布的0到指定整型数(n)之间的整型值。 -
long nextLong()
:返回下一个从随机发生器的系列中得到的均匀分布的长整型值。 -
void setSeed(long seed) :设置随机数发生器的种子为一个长整型数。
关于种子的描述:
这个类的对象使用一个48位的种子,
如果这个类的两个实例是用同一个种子创建的,
并且,各自对它们以同样的顺序调用方法,
则它们会产生相同的数字序列。
下面就对上面的介绍做一个实验,
尤其注意相同种子时的结果,
如果用默认的构造函数构造对象,
他们是属于同一个种子的。
代码:
import java.util.Random;
public class TestRandom{
public static void main(String[] args){
Random r1 = new Random(50);
System.out.println(“第一个种子为50的Random对象”);
System.out.println(“r1.nextBoolean():/t” + r1.nextBoolean());
System.out.println(“r1.nextInt():/t/t” + r1.nextInt());
System.out.println(“r1.nextDouble():/t” + r1.nextDouble());
System.out.println(“r1.nextGaussian():/t” + r1.nextGaussian());
System.out.println(“—————————“);
Random r2 = new Random(50);
System.out.println(“第二个种子为50的Random对象”);
System.out.println(“r2.nextBoolean():/t” + r2.nextBoolean());
System.out.println(“r2.nextInt():/t/t” + r2.nextInt());
System.out.println(“r2.nextDouble():/t” + r2.nextDouble());
System.out.println(“r2.nextGaussian():/t” + r2.nextGaussian());
System.out.println(“—————————“);
Random r3 = new Random(100);
System.out.println(“种子为100的Random对象”);
System.out.println(“r3.nextBoolean():/t” + r3.nextBoolean());
System.out.println(“r3.nextInt():/t/t” + r3.nextInt());
System.out.println(“r3.nextDouble():/t” + r3.nextDouble());
System.out.println(“r3.nextGaussian():/t” + r3.nextGaussian());
System.out.println(“结果一目了然!”);
}
}
结果:
代码:
第一个种子为50的Random对象
r1.nextBoolean(): true
r1.nextInt(): -1727040520
r1.nextDouble(): 0.6141579720626675
r1.nextGaussian(): 2.377650302287946
第二个种子为50的Random对象
r2.nextBoolean(): true
r2.nextInt(): -1727040520
r2.nextDouble(): 0.6141579720626675
r2.nextGaussian(): 2.377650302287946
种子为100的Random对象
r3.nextBoolean(): true
r3.nextInt(): -1139614796
r3.nextDouble(): 0.19497605734770518
r3.nextGaussian(): 0.6762208162903859
结果一目了然!