Java—ISBN号码问题

每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,
其中符号“-”是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN码。ISBN码的首位数字表示
书籍的出版语言,例如0代表英语;第一个分隔符“-”之后的三位数字代表出版社,例如670代表维京出版社;第二个分隔之后的
五位数字代表该书在出版社的编号;最后一位为识别码。

识别码的计算方法如下:

首位数字乘以1加上次位数字乘以2……以此类推,用所得的结果mod 11,所得的余数即为识别码,如果余数为10,
则识别码为大写字母X。例如ISBN号码0-670-82162-4中的识别码4是这样得到的:对067082162这9个数字,从左至右,
分别乘以1,2,…,9,再求和,即0×1+6×2+……+2×9=158,然后取158 mod 11的结果4作为识别码。

编写程序判断输入的ISBN号码中识别码是否正确,如果正确,则仅输出“Right”;如果错误,则输出是正确的ISBN号码。

输入格式
输入只有一行,是一个字符序列,表示一本书的ISBN号码(保证输入符合ISBN号码的格式要求)。
输出格式
输出一行,假如输入的ISBN号码的识别码正确,那么输出“Right”,否则,按照规定的格式,输出正确的ISBN号码(包括分隔符“-”)。
样例输入1
0-670-82162-4
样例输出1
Right
样例输入2
0-670-82162-0
样例输出2

0-670-82162-4

之前忘记了X这么个东西。。。答案是参考答案,我自己写的都不好意思贴出来 = =,虽然结果一样,但是麻烦了好多。。

import java.io.BufferedReader;
import java.io.InputStreamReader;
 
public class Main {
         public static void main(String args[]) {
                  
                  BufferedReader bin = new BufferedReader(new InputStreamReader(System.in));
                  try{
                          int sum=0;char cc='0';
                          String isbn_0 = bin.readLine();
                          String isbn = isbn_0.replace("-", "");
                          
                          for(int i=0; i<9; i++){
                                   int ii = (int)isbn.charAt(i)-48;//'0'的ASCII为48
                                   sum += ii * (i+1);
                          }
                          sum = sum % 11;
                          if(sum == 10) cc = 'X';//
                          else cc = (char)(sum+48);
                          if(cc == isbn.charAt(9)) System.out.println("Right");
                          else{
                                   isbn_0 = isbn_0.substring(0,12) + cc;
                                   System.out.println(isbn_0);
                          }
                  }catch(Exception e){
                          e.printStackTrace();
                  }
         }
}


### 使用Java实现爬虫抓取ISBN数据 为了使用Java编写一个能够有效抓取ISBN信息的爬虫程序,需遵循一定的原则和技术手段。考虑到服务器可能采取的各种反爬措施以及法律法规的要求,在设计和开发过程中应特别注意合法性和道德规范。 #### 遵守Robots协议并尊重网站规定 任何爬虫活动都应当严格遵守目标站点所设定的`robots.txt`文件中的指示,确保不违反其对于访问频率、路径等方面的限制[^1]。这不仅是对其他用户的公平负责行为,也是避免法律责任的有效方式之一。 #### 控制请求速率以减轻服务器负担 频繁地向同一台服务器发送大量请求可能导致对方启动防护机制或将IP地址列入黑名单。因此合理规划每次HTTP GET/POST操作之间的时间间隔至关重要。可以通过引入随机等待时间来模仿人类浏览习惯,从而降低被识别为自动化脚本的风险[^4]。 #### 设置合理的超时策略防止无限期挂起 在网络环境不稳定的情况下,某些连接可能会异常中断而造成线程阻塞现象。为此应在发起网络调用前预先定义好最大允许响应时限,一旦超过该阈值即刻终止当前任务并尝试重新建立链接或跳过此条目继续下一个对象的操作流程。 下面给出一段简单的基于Jsoup库构建的Java代码片段作为示范: ```java import org.jsoup.Jsoup; import org.jsoup.nodes.Document; public class IsbnCrawler { public static void main(String[] args) throws Exception{ String url = "http://example.com/isbns"; // 替换成实际网址 try { Document doc = Jsoup.connect(url).timeout(5000).get(); // 设定五秒内完成加载 System.out.println(doc.title()); // 输出页面标题验证是否成功打开 // 假设isbn位于特定class名为'book-isbn'之下p标签里 Elements isbns = doc.select(".book-isbn p"); for (Element isbn : isbns){ System.out.println(isbn.text()); } } catch(IOException e){ System.err.println("Error occurred while fetching the document."); } } } ``` 这段代码实现了基本功能:它会前往指定URL下载HTML文档内容,并从中提取所有具有`.book-isbn p`样式的元素文本——这些通常用来表示书籍对应的国际标准书(ISBN)[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值