我有一个XML格式的文件(仅包含根开始和结束标记,以及根目录的子项).子元素的文本元素包含&符号&.在XML中,不允许使用此符号以使文档有效,当我尝试使用Java中的DOM API和XML解析器处理文件时,我获得了解析错误.因此,我已经替换了&&,并且我成功处理了文件:我必须在不同的纯文本文件中提取文本元素的值.
当我打开这些新创建的文本文件时,我希望看到&,但是有了&而不是.为什么是这样?我已经将文本存储在没有任何扩展名的文本文件中(我的XML格式的原始文件也没有.xml扩展名),而且我确实只是在新文件的文本中,无论我如何打开文件:作为txt或xml文件(这些是我的XML编辑器中的一些选项).究竟发生了什么?Java(?)&会自动转换为&吗?或者有一些默认编码?嗯,&代表&,我想有一些"看不见的"自动转换,但我很困惑何时以及如何发生这种情况.以下是我使用Java处理原始文件后收到的原始文件和提取文件的示例:
这是我的XML格式的"negative.review"文件:
<review>
<review_text>
I will not wear it as it is too big & looks funny on me.
</review_text>
</review>
Run Code Online (Sandbox Code Playgroud)
这是我提取的文件"negative_1":
I will not wear it as it is too big & looks funny on me.
Run Code Online (Sandbox Code Playgroud)
对我来说重要的是原始数据原样(没有进行任何转换/替换),所以我认为我必须处理提取的文件"negative_1"转换回&&.如你所见,似乎我不必这样做.但我不明白为什么:(.
先感谢您!
我有一个关于Java中泛型的问题,即使用通配符.我有一个像这样的示例类GenClass:
public class GenClass<E> {
private E var;
public void setVar(E x) {
var = x;
}
public E getVar() {
return var;
}
}
Run Code Online (Sandbox Code Playgroud)
我有另一个简单的类:
public class ExampleClass {
}
Run Code Online (Sandbox Code Playgroud)
我写了以下测试类:
public class TestGenClass {
public static void main(String[] str) {
ExampleClass ec = new ExampleClass();
GenClass<ExampleClass> c = new GenClass<ExampleClass>();
c.setVar(ec);
System.out.println(c.getVar()); // OUTPUT: ExampleClass@addbf1
}
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我使用通配符并在测试类中写入:
GenClass<?> c = new GenClass<ExampleClass>();
Run Code Online (Sandbox Code Playgroud)
在以下的地方:
GenClass<ExampleClass> c = new GenClass<ExampleClass>();
Run Code Online (Sandbox Code Playgroud)
编译器对这个新语句没有任何问题,但它抱怨
c.setVar(ec);
Run Code Online (Sandbox Code Playgroud)
它说"方法(setVar())不适用于参数(ExampleClass)".为什么我收到此消息?
我认为我使用通配符的方式使得引用变量c的类型为GenClass,它将接受任何类作为参数 - 在EI的位置上将具有任何类.这只是变量的声明.然后我用它初始化它
new GenClass<ExampleClass>()
Run Code Online (Sandbox Code Playgroud)
这意味着我创建了一个GenClass类型的对象,它具有一个类型为ExampleClass的参数.所以,我认为现在GenClass中的E将是ExampleClass,我将能够使用方法setVar(),将其作为类型为ExampleClass的参数.这是我的假设和理解,但似乎Java不喜欢它,我不对.任何评论表示赞赏,谢谢.
在Java中存在某些预定义的异常,如果抛出这些异常,则会报告发生了严重的事情,并且您可以更好地改进代码,而不是在catch块中捕获它们(如果我已正确理解它).但我仍然发现许多程序,其中包括以下内容:
} catch (IOException e) {
...
} catch (FileNotFoundException e) {
....
}
Run Code Online (Sandbox Code Playgroud)
我认为IOException和FileNotFoundException正是这种异常,我们不应该在catch块中捕获它们.为什么人们这样做?这样抓住他们会更好吗?无论如何,Java编译器都会警告这种问题.
谢谢.
我正在使用Java,我正在尝试使JTable中的单元格可编辑.我的类实现的TableModel和延伸AbstractTableModel上(这样我可以使用的方法fireTableCellUpdated(rowIndex, columnIndex)),我已经实现的方法isCellEditable()和setValueAt()我表示表中的单个小区作为类细胞的对象.
现在这是我的问题:单元格已经可编辑了,当我点击它时,光标会出现在单元格中,但是,单元格中还会出现一个字符串,如下所示:Cell@1e63e3d.我删除了这个字符串,并在单元格中放入了我要放置的值,然后单击Enter,它工作正常.但我希望当我点击那里的单元格时什么也不显示,一个空字符串,而不是Cell@1e63e3d.我不知道如何将此空字符串设置为默认值和位置.
我的Cell类存储有关单元格的信息(特征),如单元格的颜色,以及它作为实例变量的值.
如果您需要更多信息,请告诉我.
我对Java中的return语句中布尔变量的含义(评估)有疑问.
我知道:
if (var) { ... }
Run Code Online (Sandbox Code Playgroud)
是相同的:
if (var==true) { ... }
Run Code Online (Sandbox Code Playgroud)
在第二种情况下,我们明确地说var == true,但我们不需要这样做,因为无论如何Java都将var计算为true.我希望我理解这一点.
我的问题是:返回布尔变量时是否相同?当我们有退货声明?
例如,任务指定:方法LooksBetter()仅在b <a时才返回true.我的解决方案是:
public boolean looksBetter() {
if (b < a) {
return true;
} else {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
简单的答案是:
public boolean lookBetter() {
return b < a;
}
Run Code Online (Sandbox Code Playgroud)
因此,似乎在这里我们再次有这个隐含的假设,即在b <a == true的情况下,方法的返回为真.对不起......这看起来很微不足道,但我对此感到不舒服,我不知道为什么.谢谢.
在Java的以下示例程序中,我得到无限循环,我无法理解为什么:
public class Time {
public static int next(int v) {
return v++;
}
public static void main(String[] args) {
int[] z = {3, 2, 1, 0};
int i = 1;
while(i < 4) {
System.out.println(z[i]/z[i]);
i = next(i);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在while循环中,方法next()被调用,并且我应该每次递增1:next()应该返回i ++,而while循环中i的值应该递增1.
为什么可能是无限循环的原因?谢谢.
在以下示例中,我对理解Java的"pass-by-value"操作有疑问:
public class Numbers {
static int[] s_ccc = {7};
static int[] t_ccc = {7};
public static void calculate(int[] b, int[] c) {
System.out.println("s_ccc[0] = " + s_ccc[0]); // 7
System.out.println("t_ccc[0] = " + t_ccc[0]); // 7
b[0] = b[0] + 9;
System.out.println("\nb[0] = " + b[0]); // 16
c = b;
System.out.println("c[0] = " + c[0] + "\n"); // 16
}
public static void main(String[] args) {
calculate(s_ccc, t_ccc);
System.out.println("s_ccc[0] = " + s_ccc[0]); // 16
System.out.println("t_ccc[0] = " …Run Code Online (Sandbox Code Playgroud) 我有以下代码的问题.我收到了错误消息
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.rangeCheck(ArrayList.java:571)
at java.util.ArrayList.set(ArrayList.java:364)
at Test.main(Test.java:17)
Run Code Online (Sandbox Code Playgroud)
而且我不明白为什么.我有一个列表,初始化,然后我迭代它,然后我想用第一个列表的值填充另一个列表.我不明白为什么我得到IndexOutOfBoundsException.我的初始化似乎不正确.非常感谢提前.
public static void main(String[] args) {
String s1 = "one";
String s2 = "one";
ArrayList list = new ArrayList();
list.set(0, s1);
list.set(1, s2);
Iterator it = list.iterator();
ArrayList listToFill = new ArrayList();
int k = 0;
while (it.hasNext()) {
String m = "m";
listToFill.set(k, m);
k++;
}
}
Run Code Online (Sandbox Code Playgroud) 我正在Java中实现一个链表.是否可以在列表集合类中创建创建并使用实例变量"lastNode"?或者我应该始终通过从第一个节点开始的节点链接访问最后一个节点?