jsp中截取字符串的问题
我在jsp页面中有一个控件<input type="file" name="picture" size="34">我想截取地址中的文件名,如地址是:E:\C\company\WebRoot\images\botton-cz.jpg。我想截取最后一个“\” 后面的所有字符存到数据库中。但是当我定义String name = "E:\C\company\WebRoot\images\botton-cz.jpg";的时候提示我错误。请教高手这里该怎么解决? --------------------编程问答-------------------- 用 subString(); --------------------编程问答--------------------
String str="E:\\C\\company\\WebRoo\\images\\botton-cz.jpg";
int index=str.lastIndexOf("\\");
System.out.println(str.substring(index+1));
输出:botton-cz.jpg --------------------编程问答-------------------- int index = image.lastIndexOf('\');
为什么这里老是提示我\那里错误,换成“”也不对。 --------------------编程问答--------------------
正解 --------------------编程问答--------------------
为什么这里的\要改成\\呢? --------------------编程问答-------------------- Java codeString str="E:\\C\\company\\WebRoo\\images\\botton-cz.jpg";intindex=str.lastIndexOf("\\");
System.out.println(str.substring(index+1));
输出:botton-cz.jpg
字符串长度的计算方法
提示:
(1)计算字符串长度时关键是要注意辨认转义字符;(2)一个转义字符总是以反斜杠开始,再加一个其他字符组成。所以,遇到反斜杠时要特别注意!!!
1、不带转义字符的字符串
如:“abc!x=/”,其长度为 7
2、带转义字符的字符串
(1) 字符串“abc\n”:其中的'\n'为转义字符(换行符),计算字符串长度时只能计作一个字符,所以该字符串的长度为4(而不是5)
(2) 字符串“abc\n\\\'\"":其中有4个转义字符:'\n'(换行符)、'\\'(反斜杠)、'\''(单引号)、'\"'(双引号),所以该字符串的长度为7(而不是11)。
(3) 字符串“abc\0xyz”:其中有一个转义字符'\0',它是字符串结束符,所以,当用函数strlen来测试该字符串的长度时,结果应该为3(而不是7)。
(4) 字符串“abc\\0xy”:其中有一个转义字符'\\'(反斜杠),这样,后面的字符串“0xy”照样计算,所以,该字符串的长度为7(而不是将第二个反斜杠与其后的0结合为一个转义字符'\0',若那样的话,第一个反斜杠将无法处理,因为一个转义字符总是由反斜杠加其他字符组成的,单独的一个反斜杠不能作为任何合法的字符)。
(5) 若将字符串“abc\\0xy”改为“abc\\\0xy”:则其中有二个转义字符'\\'(反斜杠)和'\0'(字符串结束符),这时,当用函数strlen来测试该字符串的长度时,结果应该为4(而不是7)。
(6) 若将字符串“abc\\\0xy”改为“abc\\\061xy”:则其中有二个转义字符'\\'(反斜杠)和'\061'(ASCII码值等于061的字符,也即数字字符'1'),这时,当用函数strlen来测试该字符串的长度时,结果应该为7(而不是4或9)。所以,当遇到转义字符'\0'时,还要看其后面是否还有数字,若有,则应将后面的数字(一至二位)与前面的'\0'相结合作为一个字符计入整个字符串的长度。
若用printf(“abc\\\061xy”);输出,则输出结果为:abc\1xy[/code] --------------------编程问答-------------------- <%@ page language="java"
import="s2jsp.bysj.dao.*,s2jsp.bysj.entity.*,java.sql.*,java.util.*"
pageEncoding="gbk"%>
<%@ include file="checkSession.jsp"%>
<html>
<head>
<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>管理员-添加</title>
<link rel="stylesheet" type="text/css" href="../css/style_admin.css">
<%
request.setCharacterEncoding("gbk");
response.setContentType("text/html;charset=gb2312");
String action = request.getParameter("action");
if (action != null && "save".equals(action)) {
String serialNumber = request.getParameter("serialNumber");
String name = request.getParameter("name");
String brand = request.getParameter("brand");
String model = request.getParameter("model");
String price = request.getParameter("price");
String image = request.getParameter("picture");
String description = request.getParameter("description");
int index = image.lastIndexOf("\\");
String picName = image.substring(index + 1);
Product product = new Product();
product.setSerialNumber(serialNumber);
product.setName(name);
product.setBrand(brand);
product.setModel(model);
product.setPrice(Double.parseDouble(price));
product.setPicture(picName);
product.setDescription(description);
ProductDao productDao = new ProductDao();
int count = productDao.addProduct(product);
if (count > 0)
out.print("<script type='text/javascript'>alert('成功添加一条商品信息。');location.replace('manageProduct.jsp');</script>");
else
out.print("<script type='text/javascript'>alert('添加失败。');history.go(-1);</script>");
}
%>
<script type="text/javascript">
function fun_check_form(){
if(document.form1.serialNumber.value==""){
alert("请输入商品编号(系列)信息信息。");
return false;
}else if(document.form1.name.value==""){
alert("请输入商品名称。");
return false;
}else if(document.form1.brand.value==""){
alert("请输入商品商标。");
return false;
}else if(document.form1.model.value==""){
alert("请输入商品型号。");
return false;
}else if(document.form1.price.value==""){
alert("请输入商品价格。");
return false;
if(!isNaN(document.form1.price.value)){
alert("");
return false;
}
}else{
return true;
}
}
function checkIsFloat(){
var nc=event.keyCode;
if(nc < 48 || nc > 57 ){
if(nc==46){
var s=document.form1.price.value;
for(var i=0;i<s.length;i++){
if(s.charAt(i)=='.'){
event.keyCode=0;
return;
}
}
}else{
event.keyCode=0;return;
}
}
}
</script>
</head>
<body>
<form name="form1" action="addProduct.jsp" method="post"
onSubmit="return fun_check_form()" ENCTYPE="multipart/form-data">
<table cellspacing="1" cellpadding="4" width="100%"
class="tableborder" id="table3">
<input type="hidden" name="action" value="save">
<tr>
<td colspan="12" class="header">
添加商品信息
</td>
</tr>
<tr>
<td class="altbg1">
商品编号(系列):
</td>
<td class="altbg2" colspan="11">
<input type="text" name="serialNumber" size="34">
</td>
</tr>
<tr>
<td class="altbg1">
商品名称:
</td>
<td class="altbg2" colspan="11">
<input type="text" name="name" size="34">
</td>
</tr>
<tr>
<td class="altbg1">
商品商标:
</td>
<td class="altbg2" colspan="11">
<input type="text" name="brand" size="34">
</td>
</tr>
<tr>
<td class="altbg1">
商品型号:
</td>
<td class="altbg2" colspan="11">
<input type="text" name="model" size="34">
</td>
</tr>
<tr>
<td class="altbg1">
商品价格:
</td>
<td class="altbg2" colspan="11">
<input type="text" name="price" size="34"
onkeypress="checkIsFloat();" />
</td>
</tr>
<tr>
<td class="altbg1">
商品图片:
</td>
<td class="altbg2" colspan="11">
<input type="file" name="picture" size="34">
</td>
</tr>
<tr>
<td class="altbg1">
商品介绍:
</td>
<td class="altbg2" colspan="11">
<textarea rows="5" cols="60" name="description"></textarea>
</td>
</tr>
<tr>
<td class="altbg1"></td>
<td class="altbg2" colspan="11">
<input type="submit" value="提交" name="B1" />
<input type="reset" value="重置" name="B2" />
</td>
</tr>
</table>
</form>
</body>
</html>
这是我这个页面的代码,红色就是问题的所在,添加总是不成功,为什么?那里有问题?求教各位大侠! --------------------编程问答-------------------- SB
转义符号都不认识! --------------------编程问答--------------------
SB会的话就不问了! --------------------编程问答-------------------- 向页面中添加图片,我也经常出错的! --------------------编程问答-------------------- int index = image.lastIndexOf('\'); 要用转意字符 --------------------编程问答-------------------- 思路:将路径字符串"E:\C\company\WebRoot\images\botton-cz.jpg"按"\"(在java中需要"\\"转义)分离字符串成字符串数组,去最后一个字符串元素也就是array[array.length - 1];
OK! --------------------编程问答--------------------
无语。。。。。。 --------------------编程问答--------------------
--------------------编程问答-------------------- String str="E:\\C\\company\\WebRoo\\images\\botton-cz.jpg";
public static void main(String[] args) {
String path = "E:C\\company\\WebRoot\\images\\botton-cz.jpg";
System.out.println("Path:" + path);
String[] array = path.split("\\\\"); // 相当于两个\\ ,正则要求,仔细体会
System.out.println("File Name:" + array[array.length - 1]);
}
int index=str.lastIndexOf("\\");
System.out.println(str.substring(index+1));
--------------------编程问答--------------------
真是不知道你们有多厉害似的 --------------------编程问答-------------------- MyJsp.jsp:
<form action="test.jsp">
<input type = "file" id = "pfile" name = "pfile" size = "34"/>
<input type = "submit" id = "submit" name = "submit"/>
</form>
test.jsp:
<body>
<% String path = request.getParameter("pfile");
String name = path.substring(path.lastIndexOf("\\")+1);
out.println(name);
%>
</body>
--------------------编程问答--------------------
不会就问,9楼你什么都会啊,顶楼主。 --------------------编程问答-------------------- 太长了吧 --------------------编程问答-------------------- 和谐 都是为了学习 --------------------编程问答-------------------- String name = "E:\C\company\WebRoot\images\botton-cz.jpg";这样写报错很正常因为'\'代表的意思是转义例如\r代表换行。 如果你想截取字符串则
String image = request.getParameter("picture");
String str=image.replaceAll("\\",",");
int index = str.lastIndexOf(",");
String picName = image.substring(index + 1);
--------------------编程问答--------------------
因为这里需要的是转义字符
补充:Java , Web 开发