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);
上面的代码都是移动指针,读取字符了,你自己推敲吧。
它读取的这个文件,是由用户灰鸽子主控程序界面操作产生的,其实很简单,比如。没有时间,今天就说到这

参考技术A jhjhjj析一段将木马的安装程序注入到目标机之后,该安装程序会自动运行,运行时就首先执行这段代码。这段代码是从和该木马安装程序一起的一个无类型文件读取信息。要弄清这段代码,首先要搞清楚这样几个DELPHI文件操作函数:关联文件函数 Assignfile(F,paramstr(0));它的作用是把文件类型变量F与paramstr(0)所指的文件关联起来,以便进行后面的操作。 Reset(f,1);函

以上是关于org.apache.commons.lang.StringUtils的jar包是啥的主要内容,如果未能解决你的问题,请参考以下文章