url一般格式为:
protocol://[user[:password]@](domain_name|ip)[:port][/[path]]
例如:
ftp://test:[email protected]:1023/test/data/data.xml
http://localhost:8080/giantstone/index.jsp
请编写函数parseUrl,将url解析成各个域打印出来:
public static void parseUrl(String url)
注:要求用String类的方法实现,不得采用正则表达式
我写了用import java.util.regex.Pattern;
import java.util.regex.Matcher;来解析URL地址的,但是不对,大家帮忙看看了
protocol://[user[:password]@](domain_name|ip)[:port][/[path]]
例如:
ftp://test:[email protected]:1023/test/data/data.xml
http://localhost:8080/giantstone/index.jsp
请编写函数parseUrl,将url解析成各个域打印出来:
public static void parseUrl(String url)
注:要求用String类的方法实现,不得采用正则表达式
我写了用import java.util.regex.Pattern;
import java.util.regex.Matcher;来解析URL地址的,但是不对,大家帮忙看看了
URL url = new URL(...);
url.getProtocol()
url.getPort()
...
String Url = "ftp://test:[email protected]:1023/test/data/data.xml";
String protocol = "";
String user = "";
String password = "";
String ip = "";
String port = "";
String path = "";
protocol = Url.substring(0, Url.indexOf(":"));
user = Url.substring(Url.indexOf("//"), Url.indexOf("@"));
user = user.substring(user.indexOf("//"), user.indexOf(":")).replace("//", "");
password = Url.substring(Url.indexOf("//"), Url.indexOf("@"));
password = password.substring(password.indexOf(":"), password.length()).replace(":","");
ip = Url.substring(Url.indexOf("@"), Url.lastIndexOf(":")).replace("@", "");
port = Url.substring(Url.lastIndexOf(":"), Url.length());
port = port.substring(port.indexOf(":"),port.indexOf("/")).replace(":", "");
path = Url.substring(Url.lastIndexOf(":"), Url.length());
path = path.substring(path.indexOf("/"), path.length());
System.out.println(protocol);
System.out.println(user);
System.out.println(password);
System.out.println(ip);
System.out.println(port);
System.out.println(path);
}
public class StringTest{
public static void main(String[] args){
String url = "http://localhost:8080/giantstone/index.jsp";
StringTest.parseUrl(url);
}
public static void parseUrl(String value){
String val;
val = value.substring(0,value.indexOf("/")-1);
System.out.println("Protocal: " +val);
int startIndex = value.indexOf("/")+2;
int endIndex = value.indexOf(":",startIndex);
val = value.substring(startIndex,endIndex);
System.out.println("User: " +val);
startIndex = endIndex+1;
endIndex = value.indexOf("/",startIndex);
val = value.substring(startIndex,endIndex);
System.out.println("Port: " +val);
String[] vals = value.split("/");
startIndex = endIndex+1;
endIndex = value.indexOf("/",startIndex);
val = value.substring(startIndex,endIndex);
System.out.println("Path: /" +val+"/"+vals[vals.length-1]);
startIndex = endIndex;
endIndex = value.lastIndexOf("/");
val = value.substring(startIndex,endIndex);
System.out.println("Request File Dir: " +val);}}
这样得出的结果是对的,但是如果把传入的字符串改为“ftp://test:[email protected]:1023/test/data/data.xml”
出去的结果就对了。好像必须用IF语句来判断者俩中格式的URL地址,大家看看怎么写
你这样如果把Url换成“http://localhost:8080/giantstone/index.jsp”就不对了
import java.io.*;public class MyString { //(2)编写函数parseUrl,将url解析成各个域打印出来
public static void parseUrl(String url) {
int q = 0;// 记录用
int i;
int iLast = 0;// 用来记录上一个位置
for (i = 0; i < url.length(); i++) {
if (url.charAt(i) == ':')// 如果找到第一个冒号,则打印之前内容
{
if (q == 0) {
System.out.println("protocol[" + url.substring(0, i) + "]");// 打印输出protocol
q++;
} else if (q == 1) {
System.out.println("user[" + url.substring(iLast + 1, i)
+ "]");// 打印输出user
q++;
} else if (q == 2) {
// 还需判断这部分是domain_name还是ip,要求用String类的方法实现,不得采用正则表达式
String s = url.substring(iLast + 1, i);
if (isIPV4(s)) {
System.out.println("ip[" + s + "]");// 打印输出ip
} else {
System.out.println("domain_name[" + s + "]");// 打印输出domain_name
}
q++;
}
iLast = i;
} else if (url.charAt(i) == '@') {
System.out.println("password[" + url.substring(iLast + 1, i)
+ "]");// 打印输出password
iLast = i;
} else if (url.charAt(i) == '/') {
if ((url.charAt(i - 1) != '/') && (url.charAt(i + 1) != '/')) {
System.out.println("port[" + url.substring(iLast + 1, i)
+ "]");// 打印输出port
break;// 跳出循环
}
iLast = i;
}
}
// 最后输出path
System.out.println("path[" + url.substring(i + 1) + "]");// 打印输出path
}
//判断(2)中是domain_name|ip?
public static boolean isIPV4(String s) {
try {
String number = s.substring(0, s.indexOf('.'));
if (Integer.parseInt(number) > 255)
return false;
s = s.substring(s.indexOf('.') + 1);
number = s.substring(0, s.indexOf('.'));
if (Integer.parseInt(number) > 255)
return false;
s = s.substring(s.indexOf('.') + 1);
number = s.substring(0, s.indexOf('.'));
if (Integer.parseInt(number) > 255)
return false;
number = s.substring(s.indexOf('.') + 1);
if (Integer.parseInt(number) > 255)
return false;
return true;
} catch (Exception e) {
return false;
}
}
public static void main(String[] args) {
MyString.parseUrl("ftp://test:[email protected]:1023/test/data/data.xml");
}}这个是我们一个同学做,但是他做的台繁琐了,而我又想不出其他方法