??xml version="1.0" encoding="utf-8" standalone="yes"?> 要用jdom解析xml文gQ需要下载j(lu)dom的包Q我使用的是jdom-1.1。解压之后,lib文g夹下?jar文g以及(qing)build文g夹下的jdom.jar拯到工E文件夹下,然后可以用jdom操作xml文g?jin)?/p>
一、读取xml文g 假设有这样一个xml文gQ?/p>
首先Q用 org.jdom.input.SAXBuilder q个cd得要操作的xml文gQ会(x)q回一?org.jdom.Document 对象Q这里需要做一下异常处理。然后,取得q个xml文g的根节点Qorg.jdom.Element 代表xml文g中的一个节点,取得跟节点后Q便可以dxml文g中的信息。利?org.jdom.xpath.XPath 可以取得xml中的L制定的节点中的信息?/p>
例如Q要取得上面文g中的 <jdbc-info> 下的 <driver-class-name> 中的内容Q先取得q个节点Element driverClassNameElement = (Element)XPath.selectSingleNode(rootEle, "http://sys-config/jdbc-info/driver-class-name")Q注意,根节点前要用两?"/" Q然后,?driverClassNameElement.getText() 便可以取得这个节点下的信息?/p>
如果一个节点下有多个名U相同的子节点,可以用XPath.selectNodes()Ҏ(gu)取得多个子节点的ListQ遍历这个List可以操作各个子节点的内容了(jin)?/p>
下面是我写的d上面xml文g的例子,比v文字描述更直观一些吧Q?/p>
二、写xml文g 写xml文g与读取xml文g的操作类|利用 org.jdom.output.XMLOutputter 可以将处理好的xml输出到文件了(jin)。可以设|文件的~码方式Q不q一般用UTF-8可以了(jin)。代码如下:(x) 下面是xml文g: <?xml version="1.0" encoding="UTF-8"?> 下面是解析上面的xml文g: 通过JDOM来解?需要借助W三方的lg.jdom.jar,|上?.0的版本下?/span> package cn.com.jdom; import java.io.File; import org.jdom.Attribute; import com.sun.xml.internal.bind.v2.runtime.Name; /** public JDomXML() { /**
var fananname=$("#editname").val();
var jsonList = eval(createArray());
var jsonText = JSON.stringify(jsonList);
$.ajax({
type: "POST",
url: "/shop/ffselect!saveAttachedUrl.action",
dataType:"json",
data: {
"fanan":fananname,
"jsonarray":jsonText
},
success: function(data) {
if(data.status=="success"){
window.location.href="www.baidu.com";
}
},
});
})
function createArray(){
var jsonarray=[];
var fanganid=$("#selectTitleid").val();
var $goodsurl=$(".goodsurl");
var $isadd=$(".isadd");
var $review=$(".inputtextarea");
var $isclear=$(".isclear");
$.each($goodsurl,function(n){
var goodsurl=$($goodsurl[n]).val();
var isadd=$($isadd[n]).val();
var review=$($review[n]).val();
var isclear=$($isclear[n]).val();
var obj=createObj(goodsurl,isadd,fanganid,review,isclear);
jsonarray.push(obj);
})
return jsonarray;
}
function createObj(urlval,isaddval,faidval,reviewval,isclearval){
return {
url:urlval,
isadd:isaddval,
faid:faidval,
review:reviewval,
isclear:isclearval
}
}
后台接受 1 public String saveAttachedUrl(){
3 String fanan = getParameter("fanan");
4 String jsonarray = getParameter("jsonarray");
5 System.out.println(fanan);
6 System.out.println(jsonarray);
7 // String str = "[{'name':'张三','sex':'?},{'name':'李四','sex':'?},{'name':'王五','sex':'?}]";
8 JSONArray json = JSONArray.fromObject(jsonarray);
9 int size = json.size();
10 for(int i = 0; i<size; i++){
11 String re = json.getString(i);
12 JSONObject s = JSONObject.fromObject(re);
13 attacheURL.setAdd_date(new Date());
14 attacheURL.setComments(s.getString(""));
15 attacheURL.setGoods_url(s.getString(""));
16 attacheURL.setId(re);
17 attacheURL.setRemark(s.getString(""));
18 attacheURL.setSelect_title_id(s.getString(""));
19 if(s.getString("")!=null){
20 attacheURL.setIsAddUrl(Integer.parseInt(s.getString("")));
21 }if(s.getString("")!=null){
22 attacheURL.setState(Integer.parseInt(s.getString("")));
23 }
24 this.selectFanFan.saveSelectAttachedUrl(attacheURL);
25 }
26 return ajax(Status.success);
27 }
]]>
xml是一U广Z用的可扩展标记语aQjava中解析xml的方式有很多Q最常用的像jdom、dom4j、sax{等。前两天刚好有个E序需要解析xmlQ就学了(jin)下jdomQ写?jin)个例子,q里做个学习(fn)W记?
http://www.cnblogs.com/ling_yun/archive/2011/01/19/1939674.html
<persons>
<person perid="1001">
<name>lhu</name>
<age>89</age>
<address>安徽淮北</address>
<sex>?lt;/sex>
</person>
<person perid="1002">
<name>we</name>
<age>56</age>
<address>北京h(wn)</address>
<sex>?lt;/sex>
</person>
</persons>
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.ProcessingInstruction;
import org.jdom.input.SAXBuilder;
* jdom解析xml文g
*
* @author ly *
*/
public class JDomXML {
}
* 解析xml文g
* @param xmlFile
*/
public void parseXml(File xmlFile) {
SAXBuilder sax = new SAXBuilder();//在内存(sh)建立一个sax文档模型
try {
Document xmlDom = sax.build(xmlFile);//创徏文档
//获得文g的根元素
Element root = xmlDom.getRootElement();
System.out.println("根元素是:"+root.getName());
//获得根元素的子节?br /> List childList = root.getChildren();
Iterator listIt = childList.iterator();
while(listIt.hasNext()){
Element element = (Element)listIt.next();
System.out.println("孩子l点?"+element.getName());
}
//获得W一个孩子结?br /> Element firstChild = (Element) childList.get(0);
//获得孩子l点的属?br /> List attrList = firstChild.getAttributes();
Iterator attrIt = attrList.iterator();
while(attrIt.hasNext()){
Attribute attr = (Attribute ) attrIt.next();
System.out.println("W一个元素的属性是:"+attr.getName());
//获得属性的?br /> System.out.println("属性的值是:"+attr.getValue());
//获得属性的cd
System.out.println("属性的cd?"+attr.getAttributeType());
}
List sonList = firstChild.getChildren();
Iterator sonIt = sonList.iterator();
while(sonIt.hasNext()){
Element temp = (Element)sonIt.next();
System.out.println("属?+temp.getName()+"的值是:"+temp.getValue());
}
} catch (JDOMException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
JDomXML test = new JDomXML();
test.parseXml(new File("persons.xml"));
}
}
]]>
W一U方式用RTX官方提供的API调用发送消息的接口?
RTXSvrApi RtxsvrapiObj = new RTXSvrApi();
RtxsvrapiObj.setServerPort(6000);
String receivers = "woailuo";
String title = "RTX试";
String msg = "腾讯|http://www.qq.com";
String delayTime = "0";
String urlid = "";
String msgid = "";
int iRet = -1;
System.out.println(RtxsvrapiObj.Init());
if( RtxsvrapiObj.Init())
{
iRet = RtxsvrapiObj.sendNotify(receivers, title, msg, urlid, msgid,
delayTime);
if (iRet == 0)
{
System.out.println("发送成?/span>");
}
else
{
System.out.println("发送失?/span>");
}
}
RtxsvrapiObj.UnInit();
}
W二U通过调用RTX服务器CGI的方式实现?/p>
String sendImg = "/SendNotify.cgi?"; // RTX发送消息接?/span>
String host = "127.0.0.1"; // RTX服务器地址
String getSessionkey = "/getsessionkey.cgi?"; // RTX获取?x)话接?/span>
int port = 8012; // RTX服务器监听端?/span>
String[] receiverss = { "woailuo" }; // 接收人,RTX帐号
String sender = "zilaiye"; // 发送h
String content = "[RTX培训|www.qq.com]"; // 内容
StringBuffer sendMsgParams = new StringBuffer(sendImg);
StringBuffer receiveUrlStr = new StringBuffer();
for (int i = 0; i < receiverss.length; ++i) {
if (receiveUrlStr.length() == 0) {
receiveUrlStr.append(receiverss[i]);
} else {
receiveUrlStr.append("," + receiverss[i]);
}
}
sendMsgParams.append("&receiver=" + receiveUrlStr);
if (content != null){
sendMsgParams.append("&msg=" + new String(content.getBytes("utf-8"), "utf-8"));
}
if (sender != null) {
sendMsgParams.append("&sender=" + sender);
}
URL url = new URL("HTTP", host, port, sendMsgParams.toString());
HttpURLConnection httpconn = (HttpURLConnection) url.openConnection();
String ret = httpconn.getHeaderField(3);
}
]]>
//conn.getInputStream()获取url所讉K囄的InputStream字节?br />
//formatName是图片的扩展名如Q?#8220;jpg/gif”{?br />
//Constant.PATH为新囄的地址
//pictureName新图片的名称
String smsUrl = "http://" + resConfig.getCommonShowAddress()+"/" + sms.getSmsUrl();
URL url = null;
URLConnection conn = null;
url = new URL(smsUrl);
conn = url.openConnection();
BufferedImage image = ImageIO.read(conn.getInputStream());
String formatName = filePostfix.substring(1, filePostfix.length());
ImageIO.write(image, formatName, new File(Constant.PATH, pictureName));
如果不是囄Q?br /> jar包是uploadbean.jar
UploadBean 使用的是javazoom.upload.UploadBean
String filename = user.getUserName() + Constant.getDate() + ".lst"; //信息索引文g
String bodyFileName = Constant.getDate() + ".tel"; //?sh)话文g
String messageFileName = Constant.getDate() + ".txt"; //彩信的文本内宏V?br /> String pictureName = Constant.getDate() +filePostfix ; //囄名称
UploadBean upload = new UploadBean();
upload.setParser(MultipartFormDataRequest.COSPARSER);
upload.setWhitelist(Constant.WHITELIST);
upload.setFolderstore(Constant.PATH);
telStr = strBuff.toString().trim();
FileOutputStream bodyfos = new FileOutputStream(new File(Constant.PATH, bodyFileName));
BufferedWriter bodytbw = new BufferedWriter(new OutputStreamWriter(bodyfos, "GBK"));
bodytbw.write("\"" + telStr + "\"");
bodytbw.flush();
bodytbw.close();
bodyfos.close();
生成的文件名U有中文?br /> FileOutputStream fos = new FileOutputStream(new File(Constant.PATH, new String(filename.getBytes("GBK"))));
BufferedWriter stdout = new BufferedWriter(new OutputStreamWriter(fos, "GBK"));
stdout.write(sb.toString());//sb.toString()是写入文件的内容?br /> stdout.flush();
stdout.close();
fos.close();
]]>
以后可以参考,写的很详l很不错?br />例如Q两个服务器g服务器A和硬件服务器BQA中跑着应用服务器tomcat-XQ服务器端)(j)QB中跑着应用服务器tomcat-YQ客L(fng)Q;
1、简单的从服务器X端向另一个服务器Y端的一个ActionhQ由Yq回lX一个信息?br />//h的url地址Q从X中用此链接带一些参数给Y
String urlPath = "http://"+server.getResSynAddress()+":"+server.getProgramPort()+"/"+server.getProgramName()+"/server.do?method=checkServerForStudy&serverId="+server.getId()+"&resCode="+resCode+"&ip="+ip;
try{
URL url = new URL(urlPath);
HttpURLConnection httpurlconnection = (HttpURLConnection) url.openConnection();
httpurlconnection.setDoOutput(true);
httpurlconnection.setConnectTimeout(10000);
httpurlconnection.setRequestMethod("POST");
httpurlconnection.connect();
hf = httpurlconnection.getHeaderField("hf"); //获取Y发回来的东东?br /> }catch(Exception e){
e.printStackTrace();
}
public ActionForward checkServerForStudy(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
//一些处理逻辑Q没必要看了(jin)?br /> String pathStrName1 = server.getResUploadAddr()+ resource.getUrlOfUpload();
File file1 = null;
File file2 = null;
boolean flag1 = false;
boolean flag2 = false;
String pathStrName2 = server.getResUploadAddr()+ resource.getPathOfPlay()+"/imsmanifest.xml";
file1 = new File(pathStrName1);
flag1 = file1.exists();
file2 = new File(pathStrName2);
flag2 = file2.exists();
if(flag1==true&&flag2==true){
response.setHeader("hf", "1"); //此处q回lX端一些东东;
}else{
response.setHeader("hf", "0"); //此处q回lX端一些东东;
}
return null;
}
okq样实C(jin)单的q程通信。ƈ不需要用response.sendRedirect("url");q样的代码去从X服务器蟩到Y服务器处理相关的逻辑。ؓ(f)什么非要蟩到Y上呢Q因为我需要检查本地磁盘是否有我要的东西,也就?font size="2"> File file1 = new File();
]]>
request.getServerPort()----->获取应用的端口好如:(x)8080
request.getContextPath()----->获取工程的名U如QjavaTest
例子Q?br />
request.getScheme()+"://"+InetAddress.getLocalHost().getHostAddress()+":"+request.getServerPort()+request.getContextPath()+"/approvalsExe.do?method=apprList&seq=1&mNumber=Approvals_module
http://10.1.1.134:8080/javaTest/approvalsExe.do?method=apprList&seq=1&mNumber=Approvals_module
]]>
]]>
除了(jin)构造器Q?span style="font-family: verdana,geneva">StringUtils 中一共有130多个Ҏ(gu)Qƈ且都?static 的,所以我们可以这栯?StringUtils.xxx()
下面分别对一些常用方法做要介l:(x)
1. public static boolean isEmpty(String str)
判断某字W串是否为空Qؓ(f)I的标准?str==null ?str.length()==0
下面?StringUtils 判断是否为空的示例:(x)
StringUtils.isEmpty(null) = true
StringUtils.isEmpty("") = true
StringUtils.isEmpty(" ") = false //注意?StringUtils 中空g非空处理
StringUtils.isEmpty(" ") = false
StringUtils.isEmpty("bob") = false
StringUtils.isEmpty(" bob ") = false
2. public static boolean isNotEmpty(String str)
判断某字W串是否非空Q等?!isEmpty(String str)
下面是示例:(x)
StringUtils.isNotEmpty(null) = false
StringUtils.isNotEmpty("") = false
StringUtils.isNotEmpty(" ") = true
StringUtils.isNotEmpty(" ") = true
StringUtils.isNotEmpty("bob") = true
StringUtils.isNotEmpty(" bob ") = true
3. public static boolean isBlank(String str)
判断某字W串是否为空或长度ؓ(f)0或由I白W?span style="font-family: verdana,geneva">(whitespace) 构成
下面是示例:(x)
StringUtils.isBlank(null) = true
StringUtils.isBlank("") = true
StringUtils.isBlank(" ") = true
StringUtils.isBlank(" ") = true
StringUtils.isBlank("\t \n \f \r") = true //对于制表W、换行符、换늬和回车符
StringUtils.isBlank() //均识为空白符
StringUtils.isBlank("\b") = false //"\b"为单词边界符
StringUtils.isBlank("bob") = false
StringUtils.isBlank(" bob ") = false
4. public static boolean isNotBlank(String str)
判断某字W串是否不ؓ(f)IZ长度不ؓ(f)0且不q白符(whitespace) 构成Q等?!isBlank(String str)
下面是示例:(x)
StringUtils.isNotBlank(null) = false
StringUtils.isNotBlank("") = false
StringUtils.isNotBlank(" ") = false
StringUtils.isNotBlank(" ") = false
StringUtils.isNotBlank("\t \n \f \r") = false
StringUtils.isNotBlank("\b") = true
StringUtils.isNotBlank("bob") = true
StringUtils.isNotBlank(" bob ") = true
5. public static String trim(String str)
L字符串两端的控制W?span style="font-family: verdana,geneva">(control characters, char <= 32) , 如果输入?null 则返?span style="font-family: verdana,geneva">null
下面是示例:(x)
StringUtils.trim(null) = null
StringUtils.trim("") = ""
StringUtils.trim(" ") = ""
StringUtils.trim(" \b \t \n \f \r ") = ""
StringUtils.trim(" \n\tss \b") = "ss"
StringUtils.trim(" d d dd ") = "d d dd"
StringUtils.trim("dd ") = "dd"
StringUtils.trim(" dd ") = "dd"
6. public static String trimToNull(String str)
L字符串两端的控制W?span style="font-family: verdana,geneva">(control characters, char <= 32) ,如果变(sh)ؓ(f) null ?"Q则q回 null
下面是示例:(x)
StringUtils.trimToNull(null) = null
StringUtils.trimToNull("") = null
StringUtils.trimToNull(" ") = null
StringUtils.trimToNull(" \b \t \n \f \r ") = null
StringUtils.trimToNull(" \n\tss \b") = "ss"
StringUtils.trimToNull(" d d dd ") = "d d dd"
StringUtils.trimToNull("dd ") = "dd"
StringUtils.trimToNull(" dd ") = "dd"
7. public static String trimToEmpty(String str)
L字符串两端的控制W?span style="font-family: verdana,geneva">(control characters, char <= 32) ,如果变(sh)ؓ(f) null ?"" Q则q回 ""
下面是示例:(x)
StringUtils.trimToEmpty(null) = ""
StringUtils.trimToEmpty("") = ""
StringUtils.trimToEmpty(" ") = ""
StringUtils.trimToEmpty(" \b \t \n \f \r ") = ""
StringUtils.trimToEmpty(" \n\tss \b") = "ss"
StringUtils.trimToEmpty(" d d dd ") = "d d dd"
StringUtils.trimToEmpty("dd ") = "dd"
StringUtils.trimToEmpty(" dd ") = "dd"
8. public static String strip(String str)
L字符串两端的I白W?span style="color: #0000ff; font-family: verdana,geneva">(whitespace) Q如果输入ؓ(f) null 则返?null
下面是示?注意?span style="color: #0000ff; font-family: verdana,geneva"> trim() 的区?Q?br />
StringUtils.strip(null) = null
StringUtils.strip("") = ""
StringUtils.strip(" ") = ""
StringUtils.strip(" \b \t \n \f \r ") = "\b"
StringUtils.strip(" \n\tss \b") = "ss \b"
StringUtils.strip(" d d dd ") = "d d dd"
StringUtils.strip("dd ") = "dd"
StringUtils.strip(" dd ") = "dd"
9. public static String stripToNull(String str)
L字符串两端的I白W?span style="color: #0000ff; font-family: verdana,geneva">(whitespace) Q如果变?sh)?null ?"Q则q回 null
下面是示?注意?trimToNull() 的区?Q?br />
StringUtils.stripToNull(null) = null
StringUtils.stripToNull("") = null
StringUtils.stripToNull(" ") = null
StringUtils.stripToNull(" \b \t \n \f \r ") = "\b"
StringUtils.stripToNull(" \n\tss \b") = "ss \b"
StringUtils.stripToNull(" d d dd ") = "d d dd"
StringUtils.stripToNull("dd ") = "dd"
StringUtils.stripToNull(" dd ") = "dd"
10. public static String stripToEmpty(String str)
L字符串两端的I白W?span style="color: #0000ff; font-family: verdana,geneva">(whitespace) Q如果变?sh)?span style="font-family: verdana,geneva"> null ?span style="font-family: verdana,geneva">"" Q则q回""
下面是示?注意?trimToEmpty() 的区?Q?br />
StringUtils.stripToNull(null) = ""
StringUtils.stripToNull("") = ""
StringUtils.stripToNull(" ") = ""
StringUtils.stripToNull(" \b \t \n \f \r ") = "\b"
StringUtils.stripToNull(" \n\tss \b") = "ss \b"
StringUtils.stripToNull(" d d dd ") = "d d dd"
StringUtils.stripToNull("dd ") = "dd"
StringUtils.stripToNull(" dd ") = "dd"
以下Ҏ(gu)只介l其功能Q不再D例:(x)
11. public static String strip(String str, String stripChars)
L str 两端的在 stripChars 中的字符?br />
如果 str ?null 或等?span style="font-family: verdana,geneva">"" Q则q回它本w;
如果 stripChars ?null ?span style="font-family: verdana,geneva">"" Q则q回 strip(String str) ?br />
12. public static String stripStart(String str, String stripChars)
?1怼Q去?span style="font-family: verdana,geneva"> str 前端的在 stripChars 中的字符?br />
13. public static String stripEnd(String str, String stripChars)
?1怼Q去?str 末端的在 stripChars 中的字符?br />
14. public static String[] stripAll(String[] strs)
对字W串数组中的每个字符串进?strip(String str) Q然后返回?br />
如果 strs ?null ?strs 长度?Q则q回 strs 本n
15. public static String[] stripAll(String[] strs, String stripChars)
对字W串数组中的每个字符串进?strip(String str, String stripChars) Q然后返回?br />
如果 strs ?null ?strs 长度?Q则q回 strs 本n
16. public static boolean equals(String str1, String str2)
比较两个字符串是否相{,如果两个均ؓ(f)I则也认为相{?br />
17. public static boolean equalsIgnoreCase(String str1, String str2)
比较两个字符串是否相{,不区分大写Q如果两个均为空则也认ؓ(f)相等?br />
18. public static int indexOf(String str, char searchChar)
q回字符 searchChar 在字W串 str 中第一ơ出现的位置?br />
如果 searchChar 没有?str 中出现则q回-1Q?br />
如果 str ?null ?"" Q则也返?1
19. public static int indexOf(String str, char searchChar, int startPos)
q回字符 searchChar ?startPos 开始在字符?str 中第一ơ出现的位置?br />
如果?startPos 开?searchChar 没有?span style="font-family: verdana,geneva"> str 中出现则q回-1Q?br />
如果 str ?null ?"" Q则也返?1
20. public static int indexOf(String str, String searchStr)
q回字符?searchStr 在字W串 str 中第一ơ出现的位置?br />
如果 str ?null ?searchStr ?null 则返?1Q?br />
如果 searchStr ?"" ,?span style="font-family: verdana,geneva"> str Z?null Q则q回0Q?br />
如果 searchStr 不在 str 中,则返?1
21. public static int ordinalIndexOf(String str, String searchStr, int ordinal)
q回字符?searchStr 在字W串 str 中第 ordinal ơ出现的位置?br />
如果 str=null ?searchStr=null ?ordinal<=0 则返?1
举例(*代表L字符?Q?br />
StringUtils.ordinalIndexOf(null, *, *) = -1
StringUtils.ordinalIndexOf(*, null, *) = -1
StringUtils.ordinalIndexOf("", "", *) = 0
StringUtils.ordinalIndexOf("aabaabaa", "a", 1) = 0
StringUtils.ordinalIndexOf("aabaabaa", "a", 2) = 1
StringUtils.ordinalIndexOf("aabaabaa", "b", 1) = 2
StringUtils.ordinalIndexOf("aabaabaa", "b", 2) = 5
StringUtils.ordinalIndexOf("aabaabaa", "ab", 1) = 1
StringUtils.ordinalIndexOf("aabaabaa", "ab", 2) = 4
StringUtils.ordinalIndexOf("aabaabaa", "bc", 1) = -1
StringUtils.ordinalIndexOf("aabaabaa", "", 1) = 0
StringUtils.ordinalIndexOf("aabaabaa", "", 2) = 0
22. public static int indexOf(String str, String searchStr, int startPos)
q回字符?searchStr ?startPos 开始在字符?str 中第一ơ出现的位置?br />
举例(*代表L字符?Q?br />
StringUtils.indexOf(null, *, *) = -1
StringUtils.indexOf(*, null, *) = -1
StringUtils.indexOf("", "", 0) = 0
StringUtils.indexOf("aabaabaa", "a", 0) = 0
StringUtils.indexOf("aabaabaa", "b", 0) = 2
StringUtils.indexOf("aabaabaa", "ab", 0) = 1
StringUtils.indexOf("aabaabaa", "b", 3) = 5
StringUtils.indexOf("aabaabaa", "b", 9) = -1
StringUtils.indexOf("aabaabaa", "b", -1) = 2
StringUtils.indexOf("aabaabaa", "", 2) = 2
StringUtils.indexOf("abc", "", 9) = 3
23. public static int lastIndexOf(String str, char searchChar)
基本原理?8
24. public static int lastIndexOf(String str, char searchChar, int startPos)
基本原理?9
25. public static int lastIndexOf(String str, String searchStr)
基本原理?0
26. public static int lastIndexOf(String str, String searchStr, int startPos)
基本原理?2
另附Q?br />
String ?split(String regex) Ҏ(gu)的用?br />
如果我们需要把某个字符串拆分ؓ(f)字符串数l,则通常?span style="font-family: verdana,geneva"> split(String regex) 来实现?br />
例如Q?br />
l果为:(x)
4
aa
bb
cc
dd
如果Q?br />
String str = "aa.bb.cc.dd";
String[] strArray = str.split(".");
则结果ؓ(f)Q?
Z么结果不是我们所想的呢,原因是参?span style="font-family: verdana,geneva"> String regex 是正则表辑ּ (regular expression) 而不是普通字W串Q?"." 在正则表辑ּ中有Ҏ(gu)含义Q表C匹配所有单个字W。如果要那样拆分Q我们必ȝ "." q行转义Q?span style="font-family: verdana,geneva">String[] strArray = str.split(".") 修改?String[] strArray = str.split("\\.") 卛_?br />
另外有关 StringUtils 的详l?API 请参见官方网?span style="font-family: arial,helvetica,sans-serif">: http://commons.apache.org/lang/api/org/apache/commons/lang/StringUtils.html
1、创建标{处理c?Tag Handler Class)
2、创建标{ֺ描述文g(Tag Library Descrptor File)
3、在web.xml文g中配|元?
4、在JSP文g中引人标{ֺ
Ctrl+1 快速修?br />
Ctrl+D: 删除当前?
Ctrl+Alt+↓ 复制当前行到下一?复制增加)
Ctrl+Alt+↑ 复制当前行到上一?复制增加)
Alt+↓ 当前行和下面一行交互位|?特别实用,可以省去先剪?再粘贴了(jin))
Alt+↑ 当前行和上面一行交互位|?同上)
Alt+← 前一个编辑的面
Alt+→ 下一个编辑的面(当然是针对上面那条来说了(jin))
Alt+Enter 昄当前选择资源(工程,or 文g or文g)的属?br />
Shift+Enter 在当前行的下一行插入空?q时鼠标可以在当前行的Q一位置,不一定是最?
Shift+Ctrl+Enter 在当前行插入I(原理同上?
Ctrl+Q 定位到最后编辑的地方
Ctrl+L 定位在某?(对于E序过100的h有音?
Ctrl+M 最大化当前的Edit或View (再按则反?
Ctrl+/ 注释当前?再按则取消注?br />
Ctrl+O 快速显C?OutLine
Ctrl+T 快速显C当前类的(h)承结?br />
Ctrl+W 关闭当前Editer
Ctrl+K 参照选中的Word快速定位到下一?br />
Ctrl+E 快速显C当前Editer的下拉列?如果当前面没有昄的用黑体表示)
Ctrl+/(键? 折叠当前cM的所有代?br />
Ctrl+×(键? 展开当前cM的所有代?br />
Ctrl+Space 代码助手完成一些代码的插入(但一般和输入法有冲突,可以修改输入法的热键,也可以暂用Alt+/来代?
Ctrl+Shift+E 昄理当前打开的所有的View的管理器(可以选择关闭,Ȁzȝ操作)
Ctrl+J 正向增量查找(按下Ctrl+J?你所输入的每个字母编辑器都提供快速匹配定位到某个单词,如果没有,则在stutes line中显C没有找C(jin),查一个单词时,特别实用,q个功能Idea两年前就有了(jin))
Ctrl+Shift+J 反向增量查找(和上条相?只不q是从后往前查)
Ctrl+Shift+F4 关闭所有打开的Editer
Ctrl+Shift+X 把当前选中的文本全部变?sh)小?br />
Ctrl+Shift+Y 把当前选中的文本全部变?sh)小?br />
Ctrl+Shift+F 格式化当前代?br />
Ctrl+Shift+P 定位到对于的匚wW?譬如{}) (从前面定位后面时,光标要在匚wW里?后面到前?则反?
下面的快捷键是重构里面常用的,本hp己喜Ƣ且常用的整理一??一般重构的快捷键都是Alt+Shift开头的?
Alt+Shift+R 重命?(是我自己最q的一个了(jin),其是变量和cȝRename,比手工方法能节省很多力_?
Alt+Shift+M 抽取Ҏ(gu) (q是重构里面最常用的方法之一?其是对一大堆泥团代码有用)
Alt+Shift+C 修改函数l构(比较实用,有N个函数调用了(jin)q个Ҏ(gu),修改一ơ搞?
Alt+Shift+L 抽取本地变量( 可以直接把一些魔法数字和字符串抽取成一个变?其是多处调用的时?
Alt+Shift+F 把Class中的local变量变(sh)ؓ(f)field变量 (比较实用的功?
Alt+Shift+I 合ƈ变量(可能q样说有点不妥Inline)
Alt+Shift+V Ud函数和变?不怎么常用)
Alt+Shift+Z 重构的后(zhn)药(Undo)
~辑
作用?功能 快捷?
全局 查找q替?Ctrl+F
文本~辑?查找上一?Ctrl+Shift+K
文本~辑?查找下一?Ctrl+K
全局 撤销 Ctrl+Z
全局 复制 Ctrl+C
全局 恢复上一个选择 Alt+Shift+↓
全局 剪切 Ctrl+X
全局 快速修?Ctrl1+1
全局 内容辅助 Alt+/
全局 全部选中 Ctrl+A
全局 删除 Delete
全局 上下文信?Alt+Q?br />
Alt+Shift+?
Ctrl+Shift+Space
Java~辑?昄工具提示描述 F2
Java~辑?选择装元素 Alt+Shift+↑
Java~辑?选择上一个元?Alt+Shift+←
Java~辑?选择下一个元?Alt+Shift+→
文本~辑?增量查找 Ctrl+J
文本~辑?增量逆向查找 Ctrl+Shift+J
全局 _脓(chung) Ctrl+V
全局 重做 Ctrl+Y
查看
作用?功能 快捷?
全局 攑֤ Ctrl+=
全局 ~小 Ctrl+-
H口
作用?功能 快捷?
全局 Ȁzȝ辑器 F12
全局 切换~辑?Ctrl+Shift+W
全局 上一个编辑器 Ctrl+Shift+F6
全局 上一个视?Ctrl+Shift+F7
全局 上一个透视?Ctrl+Shift+F8
全局 下一个编辑器 Ctrl+F6
全局 下一个视?Ctrl+F7
全局 下一个透视?Ctrl+F8
文本~辑?昄标尺上下文菜?Ctrl+W
全局 昄视图菜单 Ctrl+F10
全局 昄pȝ菜单 Alt+-
D
作用?功能 快捷?
Java~辑?打开l构 Ctrl+F3
全局 打开cd Ctrl+Shift+T
全局 打开cd层次l构 F4
全局 打开声明 F3
全局 打开外部javadoc Shift+F2
全局 打开资源 Ctrl+Shift+R
全局 后退历史记录 Alt+←
全局 前进历史记录 Alt+→
全局 上一?Ctrl+,
全局 下一?Ctrl+.
Java~辑?昄大纲 Ctrl+O
全局 在层ơ结构中打开cd Ctrl+Shift+H
全局 转至匚w的括?Ctrl+Shift+P
全局 转至上一个编辑位|?Ctrl+Q
Java~辑?转至上一个成?Ctrl+Shift+↑
Java~辑?转至下一个成?Ctrl+Shift+↓
文本~辑?转至?Ctrl+L
搜烦(ch)
作用?功能 快捷?
全局 出现在文件中 Ctrl+Shift+U
全局 打开搜烦(ch)对话?Ctrl+H
全局 工作Z的声?Ctrl+G
全局 工作Z的引?Ctrl+Shift+G
文本~辑
作用?功能 快捷?
文本~辑?改写切换 Insert
文本~辑?上滚?Ctrl+↑
文本~辑?下滚?Ctrl+↓
文g
作用?功能 快捷?
全局 保存 Ctrl+X
Ctrl+S
全局 打印 Ctrl+P
全局 关闭 Ctrl+F4
全局 全部保存 Ctrl+Shift+S
全局 全部关闭 Ctrl+Shift+F4
全局 属?Alt+Enter
全局 新徏 Ctrl+N
目
作用?功能 快捷?
全局 全部构徏 Ctrl+B
源代?br />
作用?功能 快捷?
Java~辑?格式?Ctrl+Shift+F
Java~辑?取消注释 Ctrl+\
Java~辑?注释 Ctrl+/
Java~辑?d导入 Ctrl+Shift+M
Java~辑?l织导入 Ctrl+Shift+O
Java~辑?使用try/catch块来包围 未设|,太常用了(jin)Q所以在q里列出,自己讄?br />
也可以用Ctrl+1自动修正?
q行
作用?功能 快捷?
全局 单步q回 F7
全局 单步跌 F6
全局 单步跛_ F5
全局 单步跛_选择 Ctrl+F5
全局 调试上次启动 F11
全局 l箋(hu) F8
全局 使用qo(h)器单步执?Shift+F5
全局 d/去除断点 Ctrl+Shift+B
全局 昄 Ctrl+D
全局 q行上次启动 Ctrl+F11
全局 q行臌 Ctrl+R
全局 执行 Ctrl+U
重构
作用?功能 快捷?
全局 撤销重构 Alt+Shift+Z
全局 抽取Ҏ(gu) Alt+Shift+M
全局 抽取局部变?Alt+Shift+L
全局 内联 Alt+Shift+I
全局 Ud Alt+Shift+V
全局 重命?Alt+Shift+R
全局 重做 Alt+Shift+Y