IOException与RuntimeException Java(IOException vs RuntimeException Java)
class Y { public static void main(String[] args) throws RuntimeException{//Line 1 try { doSomething(); } catch (RuntimeException e) { System.out.println(e); } } static void doSomething() throws RuntimeException{ //Line 2 if (Math.random() > 0.5) throw new RuntimeException(); //Line 3 throw new IOException();//Line 4 } }
当我抛出两种类型的异常(Line4中的IOException和Line3中的RunTimeException)时,我发现我的程序不会编译,直到我在第1行和第2行的我的throws子句中指出“IOException”。
而如果我将“throws”反转为指示抛出IOException,则程序确实会成功编译,如下所示。
class Y { public static void main(String[] args) throws IOException {//Line1 try { doSomething(); } catch (RuntimeException e) { System.out.println(e); } } static void doSomething() throws IOException {//Line 2 if (Math.random() > 0.5) throw new RuntimeException();//Line 3 throw new IOException();//Line 4 } }
为什么我应该总是使用“抛出”IOException,即使RuntimeException也被抛出(第3行)?
class Y { public static void main(String[] args) throws RuntimeException{//Line 1 try { doSomething(); } catch (RuntimeException e) { System.out.println(e); } } static void doSomething() throws RuntimeException{ //Line 2 if (Math.random() > 0.5) throw new RuntimeException(); //Line 3 throw new IOException();//Line 4 } }
When I throw two types of exception (IOException in Line4 and RunTimeException in Line3), I found that my program does not compile until I indicate "IOException" in my throws clauses in Line 1 & Line 2.
Whereas if I reverse "throws" to indicate IOException being thrown, the program does compile successfully as shown below.
class Y { public static void main(String[] args) throws IOException {//Line1 try { doSomething(); } catch (RuntimeException e) { System.out.println(e); } } static void doSomething() throws IOException {//Line 2 if (Math.random() > 0.5) throw new RuntimeException();//Line 3 throw new IOException();//Line 4 } }
Why should I always use "throws" for IOException even though RuntimeException is also thrown (Line 3) ?
原文:https://stackoverflow.com/questions/18416511
最满意答案
查看BufferedReader的Java API,即readline:
读取一行文字。 换行符被换行符('\ n'),回车符('\ r')或回车符后面的换行符中的任何一个结束。
https://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html#readLine()
因此你的代码在这里:
if((line = r.readLine()) == "<") { codeBlock = true; } if((line = r.readLine()) == ">") { codeBlock = false; }
永远不会是真的。 这些电话也会让您远离目前的分析线。
如果我正确理解您的问题,您希望任何HTML标记之间的所有文本? 你可以像
jsoup
一样使用库,或者去更简单的实现:String parse = "<HTMLCODE>My favourite pasta is spaghetti, followed by ravioli</HTMLCODE>"; final char TAG_START = '<'; final char TAG_END = '>'; StringBuilder sb = new StringBuilder(); char[] parseChars = parse.toCharArray(); boolean inTag = true; for (int i = 0; i< parseChars.length; i++) { if (parseChars[i] == TAG_START) { inTag = true; continue; } else if (parseChars[i] == TAG_END) { inTag = false; continue; } if (!inTag) { sb.append(parseChars[i]); } } System.out.println(sb.toString());
Have a look at the Java API for BufferedReader, namely readline:
Reads a line of text. A line is considered to be terminated by any one of a line feed ('\n'), a carriage return ('\r'), or a carriage return followed immediately by a linefeed.
https://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html#readLine()
Therefore your code here:
if((line = r.readLine()) == "<") { codeBlock = true; } if((line = r.readLine()) == ">") { codeBlock = false; }
Will never be true. Those calls also take you away from your current line of analysis.
If I understand your question correctly, you want all text in between any HTML tag? You could mess around with libraries like
jsoup
or go for a simpler implementation:String parse = "<HTMLCODE>My favourite pasta is spaghetti, followed by ravioli</HTMLCODE>"; final char TAG_START = '<'; final char TAG_END = '>'; StringBuilder sb = new StringBuilder(); char[] parseChars = parse.toCharArray(); boolean inTag = true; for (int i = 0; i< parseChars.length; i++) { if (parseChars[i] == TAG_START) { inTag = true; continue; } else if (parseChars[i] == TAG_END) { inTag = false; continue; } if (!inTag) { sb.append(parseChars[i]); } } System.out.println(sb.toString());
相关问答
更多-
如果你想修改网页并返回修改后的内容,那么我最好的方法就是使用XSL转换。 http://en.wikipedia.org/wiki/XSLT if you want to modify web page and return modified content, I thnk the best way is to use XSL transformation. http://en.wikipedia.org/wiki/XSLT
-
剥离Java中的HTML标签(Stripping HTML tags in Java)[2022-05-07]
使用JSoup ,它有很好的文档,在Maven可用,并且花了一天时间与几个图书馆,对我来说,这是我能想象的最好的。我自己的意见是,这样的工作,解析html到普通的,文本,应该可以在一行代码 - >否则图书馆失败了...只是说^^所以这里,JSoup的一线 - 在Markdown4J,这样的事情是不可能的,在Markdownj也,在htmlCleaner这是痛苦的屁股与约50行代码... String plain = new HtmlToPlainText().getPlainText(Jsoup.parse ... -
这似乎工作得很好(如果我正确理解你想要的): for textarea in soup.findAll('textarea'): contents = BeautifulSoup.BeautifulSoup(textarea.contents[0]).renderContents() textarea.replaceWith(contents) This seems to work fairly well (if I correctly understood what you wanted ...
-
查看BufferedReader的Java API,即readline: 读取一行文字。 换行符被换行符('\ n'),回车符('\ r')或回车符后面的换行符中的任何一个结束。 https://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html#readLine() 因此你的代码在这里: if((line = r.readLine()) == "<") { codeBlock = true; } if((line = r.re ...
-
解析Android应用中的标签中的HTML内的JSON [复制](Parse JSON which is within HTML in Tags in Android app [duplicate])[2023-08-14]
那么你可以从打开' [ '到closing' ] '开始提取子字符串,然后将其解析为json,在你的getJSONFromUrl()方法中进行更改: public void getJSONFromUrl() { ... ... json = sb.toString().substring(html.indexOf("["), html.lastIndexOf("]") + 1); ... } Well you can extract sub string sta ... -
用java中的xpath和selenium解析HTML表格数据(Parsing HTML table data with xpath and selenium in java)[2023-06-20]
可能这将满足您的需求: string text = driver.findElement(By.cssSelector("table.SpecTable")).getText(); 字符串text将包含类SpecTable中表的所有文本节点。 我更喜欢使用CSS ,因为它受IE支持并且比xpath更快。 但至于xpath教程试试这个和这个 。 Probably this will suite your needs: string text = driver.findElement(By.cssSelect ... -
当使用LOAD/MARKUP处理mess ,你会得到这个(我已经格式化+注释了类型): [ ; string! "^/" ; tag! string! tag!
"Bob Sockaway" ; string! "^/" ; tag! tag! ; string! ; tag! tag!" ... 暗示: 我认为在这种情况下你必须依赖isEndTag() API。 HINT: I think you must rely on isEndTag() API in that case.我不这么认为,但是jsoup可以做到这一点。 它不是DOM API,但它非常相似。 I don't think so but jsoup can do that. It's not the DOM API but it's quite similar.相关文章
更多- RuntimeException【转】
- [JAVA] IOException: Invalid byte 2 of 2-byte UTF-8 sequence(解决办法)
- 什么时候会出现IOException?
- Java 异常处理
- java异常处理分类
- Java try/catch 异常处理的问题
- java配置问题
- java Exception异常处理实例
- java网络编程练习
- 使用java实现ftp的上传与下载功能
最新问答
更多- 散列包括方法和/或嵌套属性(Hash include methods and/or nested attributes)
- TensorFlow:基于索引列表创建新张量(TensorFlow: Create a new tensor based on list of indices)
- 企业安全培训的各项内容
- 错误:RPC失败;(error: RPC failed; curl transfer closed with outstanding read data remaining)
- NumPy:将int64值存储在np.array中并使用dtype float64并将其转换回整数是否安全?(NumPy: Is it safe to store an int64 value in an np.array with dtype float64 and later convert it back to integer?)
- 注销后如何隐藏导航portlet?(How to hide navigation portlet after logout?)
- 将多个行和可变行移动到列(moving multiple and variable rows to columns)
- 对setOnInfoWindowClickListener的意图(Intent on setOnInfoWindowClickListener)
- Angular $资源不会改变方法(Angular $resource doesn't change method)
- 如何配置Composite C1以将.m和桌面作为同一站点提供服务(How to configure Composite C1 to serve .m and desktop as the same site)
- 不适用:悬停在悬停时:在元素之前[复制](Don't apply :hover when hovering on :before element [duplicate])
- Mysql DB单个字段匹配多个其他字段(Mysql DB single field matching to multiple other fields)
- 产品页面上的Magento Up出售对齐问题(Magento Up sell alignment issue on the products page)
- 是否可以嵌套hazelcast IMaps?(Is it possible to nest hazelcast IMaps? And whick side effects can I expect? Is it a good Idea anyway?)
- UIViewAnimationOptionRepeat在两个动画之间暂停(UIViewAnimationOptionRepeat pausing in between two animations)
- 在x-kendo-template中使用Razor查询(Using Razor query within x-kendo-template)
- 在BeautifulSoup中替换文本而不转义(Replace text without escaping in BeautifulSoup)
- 如何在存根或模拟不存在的方法时配置Rspec以引发错误?(How can I configure Rspec to raise error when stubbing or mocking non-existing methods?)
- asp用javascript(asp with javascript)
- “%()s”在sql查询中的含义是什么?(What does “%()s” means in sql query?)
- 如何为其编辑的内容提供自定义UITableViewCell上下文?(How to give a custom UITableViewCell context of what it is editing?)
- c ++十进制到二进制,然后使用操作,然后回到十进制(c++ Decimal to binary, then use operation, then back to decimal)
- 以编程方式创建视频?(Create videos programmatically?)
- 无法在BeautifulSoup中正确解析数据(Unable to parse data correctly in BeautifulSoup)
- webform和mvc的区别 知乎
- 如何使用wadl2java生成REST服务模板,其中POST / PUT方法具有参数?(How do you generate REST service template with wadl2java where POST/PUT methods have parameters?)
- 我无法理解我的travis构建有什么问题(I am having trouble understanding what is wrong with my travis build)
- iOS9 Scope Bar出现在Search Bar后面或旁边(iOS9 Scope Bar appears either behind or beside Search Bar)
- 为什么开机慢上面还显示;Inetrnet,Explorer
- 有关调用远程WCF服务的超时问题(Timeout Question about Invoking a Remote WCF Service)