如果不将每个http状态代码硬编码到java程序中,如何对这些https状态代码进行排序?
我有一个接受URL数组列表的方法。检查每个元素中的url以查看其是否连接。如果状态代码不是200,则url将作为断开的链接添加到计数中。正如您所看到的,我还打印了带有消息的url和stauts代码 我想做的是对每个不同的状态代码进行计数,而不是200 所以我会有我的断开链接的总数,还有一个不是200的状态代码的每个实例的计数。e、 g.如果有5个404的http状态,它们将被单独计算,任何其他非200的状态代码也将被单独计算 我不想把每个状态代码硬编码到我的代码中作为计数变量,我想知道有没有一种方法可以让代码为每个不同的状态创建一个新的计数变量 以下是我目前的方法:如果不将每个http状态代码硬编码到java程序中,如何对这些https状态代码进行排序?,java,url,count,hyperlink,Java,Url,Count,Hyperlink,我有一个接受URL数组列表的方法。检查每个元素中的url以查看其是否连接。如果状态代码不是200,则url将作为断开的链接添加到计数中。正如您所看到的,我还打印了带有消息的url和stauts代码 我想做的是对每个不同的状态代码进行计数,而不是200 所以我会有我的断开链接的总数,还有一个不是200的状态代码的每个实例的计数。e、 g.如果有5个404的http状态,它们将被单独计算,任何其他非200的状态代码也将被单独计算 我不想把每个状态代码硬编码到我的代码中作为计数变量,我想知道有没有一种
public static void LinkSorter(List x){
System.out.println("processing...");
int brokenLinkCount = 0;
for(int i=0; i<x.size();i++){
try{
URL url = new URL((String) x.get(i));
URLConnection conn = url.openConnection();
conn.connect();
HttpURLConnection httpCon = (HttpURLConnection)conn;
int statusCode = httpCon.getResponseCode();
String statusMessage = httpCon.getResponseMessage();
if(statusCode != 200){
System.out.println((String) x.get(i) + statusCode + statusMessage);
brokenLinkCount++;
}
catch(MalformedURLException e) {
System.out.println("MalformedURL Exception");
System.out.println(e.getMessage());
brokenLinkCount++;
} catch(IOException e){
System.out.println("IOException");
System.out.println(e.getMessage() + "IOException");
brokenLinkCount++;
}
}
if(brokenLinkCount == 0){
System.out.println("There are no broken links.");
}else if(brokenLinkCount == 1){
System.out.println("There is 1 broken link.");
}else{
System.out.println("There are " + brokenLinkCount + " broken links.");
}
}
公共静态空链接分拣机(列表x){
System.out.println(“处理…”);
int brokenLinkCount=0;
对于(int i=0;i您可以使用a,键是状态代码,值是断开的链接。这几乎可以自动获得两个:
- 每个单独的非200状态代码(作为键)
- 与每个代码关联的“断开”链接的计数(
map.get(code.size()
)
伪ish代码:
// declare a multimap, somewhere before you need to first access it
Multimap<Integer, String> brokenLinkMap = ArrayListMultiMap.create();
// use the map, in your current if block
if(statusCode != 200){
System.out.println((String) x.get(i) + statusCode + statusMessage);
brokenLinkMap.put(statusCode, url.toExternalForm()); // <-- adding to the map!
}
// after all links have been processed, you can dump the map contents
for(final Integer key : brokenLinkMap.keys()) {
System.out.printf("Broken link count for status %s: %s\n", key, brokenLinkMap.get(key).size());
}
//在需要首先访问多重映射之前的某个地方声明多重映射
Multimap brokenLinkMap=ArrayListMultiMap.create();
//在当前if块中使用贴图
如果(状态代码!=200){
System.out.println((字符串)x.get(i)+状态码+状态消息);
brokenLinkMap.put(状态码,url.toExternalForm());//我想你可以使用java.util.Map,使用状态代码作为键,使用值作为计数器。我按照你的建议编辑了上面的代码。只是学习编码,不知道为什么它不起作用。Eclipse告诉我,在我将接口添加到多重映射后,我需要一个初始化器。我知道我的brokenLinkCount不再相关。你知道吗uld还原您的编辑,因为这会使您更难理解原始问题。您不能使用我在一个连续块中显示的代码,我将添加注释以帮助您集成。请阅读代码,更重要的是,理解它。然后,如果您有后续问题,请发布注释。当我声明多重映射时,它告诉我它可以无法解析为类型。我需要创建一个类或接口。您需要创建一个类或接口,并将其包含在项目生成路径中。
// declare a map of lists, somewhere before you first need to access it
Map<Integer, List<String>> brokenLinkMap = new HashMap<Integer, List<String>>(4);
// use the map, in your current if block
if(statusCode != 200){
System.out.println((String) x.get(i) + statusCode + statusMessage);
if(! brokenLinkMap.containsKey(statusCode)) {
List<String> brokenLinkList = new ArrayList<String>(8);
brokenLinkMap.put(statusCode, brokenLinkList);
}
brokenLinkMap.get(statusCode).add(url.toExternalForm()); // <-- adding to the map!
}
// after all links have been processed, you can dump the map contents
for(final Integer key : brokenLinkMap.keys()) {
System.out.printf("Broken link count for status %s: %s\n", key, brokenLinkMap.get(key).size());
}