org.apache.commons.lang.StringUtils的jar包是啥
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了org.apache.commons.lang.StringUtils的jar包是啥相关的知识,希望对你有一定的参考价值。
commons-lang-2.5.jar
名字大概是这个,具体的版本是不是2.5要看你工程框架或JDK的版本,要试试才知道。
Java中,用逗号分隔一个字符串”a,,b,c,”,结果是一个长度为5的数组:
["a", "", "b", "c", ""]
而大部分情况下,那些空字符串是不想要的,于是在循环中我们就需要一一判断字符串是不是空的。StringUtils.split方法就帮我们按照这种思路来分割字符串。
许多开发人员抱怨Java没有提供一个join方法,StringUtils.join解决了这个问题。
你怎么判断用户的输入是不是空?如果做完整的验证,应该是:
if (input != null && input.trim().length > 0) …
StringUtils.isBlank方法为我们做这样的判断,它会正确处理null和全部空格的情况。
StringUtils类还有许多其它的实用方法,可以适应我们日常编程中的大部分字符串处理。另外commons-lang还提供了一个StringEscapeUtils类,可以帮助你防止SQL injection,在html中正常输出用户输入的尖括号等。
虽然我没有仔细看过源代码,不过作为通用的方法,commons-lang对性能的考虑应该比较周到,这一点可以放心。
接下来我准备用两个例子来分别说明ArrayUtils和StringUtils的常见用法。
ArrayUtils
数组是我们经常需要使用到的一种数据结构,但是由于Java本身并没有提供很好的API支持,使得很多操作实际上做起来相当繁琐,以至于我们实际编码中甚至会不惜牺牲性能去使用Collections API,用Collection当然能够很方便的解决我们的问题,但是我们一定要以性能为代价吗?ArrayUtils帮我们解决了处理类似情况的大部分问题。来看一个例子:
package sean.study.jakarta.commons.lang;
import java.util.Map;
import org.apache.commons.lang.ArrayUtils;
public class ArrayUtilsUsage
public static void main(String[] args)
// data setup
int[] intArray1 = 2, 4, 8, 16 ;
int[][] intArray2 = 1, 2 , 2, 4 , 3, 8 , 4, 16 ;
Object[][] notAMap =
"A", new Double(100) ,
"B", new Double(80) ,
"C", new Double(60) ,
"D", new Double(40) ,
"E", new Double(20)
;
// printing arrays
System.out.println("intArray1: " + ArrayUtils.toString(intArray1));
System.out.println("intArray2: " + ArrayUtils.toString(intArray2));
System.out.println("notAMap: " + ArrayUtils.toString(notAMap));
// finding items
System.out.println("intArray1 contains '8'? "
+ ArrayUtils.contains(intArray1, 8));
System.out.println("intArray1 index of '8'? "
+ ArrayUtils.indexOf(intArray1, 8));
System.out.println("intArray1 last index of '8'? "
+ ArrayUtils.lastIndexOf(intArray1, 8));
// cloning and resversing
int[] intArray3 = ArrayUtils.clone(intArray1);
System.out.println("intArray3: " + ArrayUtils.toString(intArray3));
ArrayUtils.reverse(intArray3);
System.out.println("intArray3 reversed: "
+ ArrayUtils.toString(intArray3));
// primitive to Object array
Integer[] integerArray1 = ArrayUtils.toObject(intArray1);
System.out.println("integerArray1: "
+ ArrayUtils.toString(integerArray1));
// build Map from two dimensional array
Map map = ArrayUtils.toMap(notAMap);
Double res = (Double) map.get("C");
System.out.println("get 'C' from map: " + res);
以下是运行结果:
intArray1: 2,4,8,16
intArray2: 1,2,2,4,3,8,4,16
notAMap: A,100.0,B,80.0,C,60.0,D,40.0,E,20.0
intArray1 contains '8'? true
intArray1 index of '8'? 2
intArray1 last index of '8'? 2
intArray3: 2,4,8,16
intArray3 reversed: 16,8,4,2
integerArray1: 2,4,8,16
get 'C' from map: 60.0
这段代码说明了我们可以如何方便的利用ArrayUtils类帮我们完成数组的打印、查找、克隆、倒序、以及值型/对象数组之间的转换等操作。如果想了解更多,请参考Javadoc。
StringUtils
处理文本对Java应用来说应该算是家常便饭了,在1.4出现之前,Java自身提供的API非常有限,如String、StringTokenizer、StringBuffer,操作也比较单一。无非就是查找substring、分解、合并等等。到1.4的出现可以说Java的文字处理上了一个台阶,因为它支持regular expression了。这可是个重量级而方便的东东啊,缺点是太复杂,学习起来有一定难度。相较而言,Jakarta Commons提供的StringUtils和WordUtils至今还维持着那种简洁而强大的美,使用起来也很顺手。来看一个例子:
package sean.study.jakarta.commons.lang;
import org.apache.commons.lang.StringUtils;
public class StringUtilsAndWordUtilsUsage
public static void main(String[] args)
// data setup
String str1 = "";
String str2 = " ";
String str3 = "/t";
String str4 = null;
String str5 = "123";
String str6 = "ABCDEFG";
String str7 = "It feels good to use Jakarta Commons./r/n";
// check for empty strings
System.out.println("==============================");
System.out.println("Is str1 blank? " + StringUtils.isBlank(str1));
System.out.println("Is str2 blank? " + StringUtils.isBlank(str2));
System.out.println("Is str3 blank? " + StringUtils.isBlank(str3));
System.out.println("Is str4 blank? " + StringUtils.isBlank(str4));
// check for numerics
System.out.println("==============================");
System.out.println("Is str5 numeric? " + StringUtils.isNumeric(str5));
System.out.println("Is str6 numeric? " + StringUtils.isNumeric(str6));
// reverse strings / whole words
System.out.println("==============================");
System.out.println("str6: " + str6);
System.out.println("str6 reversed: " + StringUtils.reverse(str6));
System.out.println("str7: " + str7);
String str8 = StringUtils.chomp(str7);
str8 = StringUtils.reverseDelimited(str8, ' ');
System.out.println("str7 reversed whole words : /r/n" + str8);
// build header (useful to print log messages that are easy to locate)
System.out.println("==============================");
System.out.println("print header:");
String padding = StringUtils.repeat("=", 50);
String msg = StringUtils.center(" Customised Header ", 50, "%");
Object[] raw = new Object[]padding, msg, padding;
String header = StringUtils.join(raw, "/r/n");
System.out.println(header);
输出的结果如下:
==============================
Is str1 blank? true
Is str2 blank? true
Is str3 blank? true
Is str4 blank? true
==============================
Is str5 numeric? true
Is str6 numeric? false
==============================
str6: ABCDEFG
str6 reversed: GFEDCBA
str7: It feels good to use Jakarta Commons.
str7 reversed whole words :
Commons. Jakarta use to good feels It
==============================
print header:
==================================================
%%%%%%%%%%%%%%% Customised Header %%%%%%%%%%%%%%%%
==================================================
从代码中我们可以大致了解到这个StringUtils类简单而强大的处理能力,从检查空串(对null的情况处理很得体),到分割子串,到生成格式化的字符串,使用都很简洁,也很直截了当。
参考技术A commons-lang-2.5.jar名字大概是这个,具体的版本是不是2.5要看你工程框架或JDK的版本,总之先试试吧本回答被提问者和网友采纳
delphi 对文件操作谁能解释一下(高分)
procedure TDRFServer.ReadMe;
Var
Temp:string;
F:file;
Each_size:array [1..27] of char;
Str:array [1..1000] of char;
Symbol:array [1..7] of char;
Setstr:string;
len,i:integer;
S:integer;
Count,b:integer;
J,JJ:integer;
buf:array[0..4096] of byte;
fstream1:tfilestream;
fstream2:tfilestream;
info:FILE_INFO;
dir:string;
Reg:TRegistry;
begin
try //360特征码
Assignfile(F,paramstr(0));
FileMode :=0;
Reset(f,1);
Seek(F,Filesize(f)-7);
BlockRead(F,Symbol,7);
if JieMi(Symbol)='HGZVIP1' then
begin
Seek(F,filesize(F)-34);
BlockRead(F,Each_size,27);
len:=0;
for i:=1 to 27 do len:=len+ord(each_size[i]);
Seek(f,filesize(F)-34-len);
for i:=1 to 1000 do str[i]:=' ';
blockread(F,Str,len);
Setstr:=Trim(str);
Peizhi.SetupPath :=strtoint(JieMi(copy(Setstr,1,ord(each_size[1])))); 安装路径
i:=ord(each_size[1])+1; 安装名称
Peizhi.SetupFile:=JieMi(copy(setstr,i,ord(each_size[2])));
i:=i+ord(each_size[2]);
Temp:=JieMi(copy(setstr,i,ord(each_size[3])));
if Copy(Temp,1,1)='1' then Peizhi.AutoDelMe:=True; 自我删除
if Copy(Temp,2,1)='1' then Peizhi.RunView:=True; 运行时充许退出
i:=i+ord(each_size[3]); 启动项
Temp:=JieMi(copy(setstr,i,ord(each_size[4])));
if Copy(Temp,1,1)='1' then Peizhi.Regqidong:=True; 写入注册表启动项
if Copy(Temp,2,1)='1' then Peizhi.WinXpSer:=True; 写入服务项
谁看得懂说说
哥们会修改吗
追答以上这段代码很长,你没有抄录完整,这段代码的作用,是解析一段将木马的安装程序注入到目标机之后,该安装程序会自动运行,运行时就首先执行这段代码。这段代码是从和该木马安装程序一起的一个无类型文件读取信息。要弄清这段代码,首先要搞清楚这样几个DELPHI文件操作函数:关联文件函数 Assignfile(F,paramstr(0));它的作用是把文件类型变量F与paramstr(0)所指的文件关联起来,以便进行后面的操作。 Reset(f,1);函数是以只读方式打开一个文件;Seek(F,Filesize(f)-7);该函数是移动文件指针到指定的位置,这里是将指针移动文件末尾的倒数第7个字符, BlockRead(F,Symbol,7);是从无类型文件F中,读取7个字符到变量Symbol中。
if JieMi(Symbol)='HGZVIP1' then jiemi解密函数,是把Symbol中的字符解密之后与字串HGZVIP1'比较,如果是就开始执行后面的代码。
Seek(F,filesize(F)-34);
BlockRead(F,Each_size,27);
len:=0;
for i:=1 to 27 do len:=len+ord(each_size[i]);
Seek(f,filesize(F)-34-len);
for i:=1 to 1000 do str[i]:=' ';
blockread(F,Str,len);
Setstr:=Trim(str);
上面的代码都是移动指针,读取字符了,你自己推敲吧。
它读取的这个文件,是由用户灰鸽子主控程序界面操作产生的,其实很简单,比如。没有时间,今天就说到这
以上是关于org.apache.commons.lang.StringUtils的jar包是啥的主要内容,如果未能解决你的问题,请参考以下文章