在Java中,数组不会覆盖toString(),因此如果您尝试直接打印数组,则会获得className + @ + className数组的十六进制,如下所示hashCode:
int[] intArray = new int[] {1, 2, 3, 4, 5};
System.out.println(intArray); // prints something like '[I@3343c8b3'
Run Code Online (Sandbox Code Playgroud)
但通常我们实际上想要更像的东西Object.toString().这样做最简单的方法是什么?以下是一些示例输入和输出:
// Array of primitives:
int[] intArray = new int[] {1, 2, 3, 4, 5};
//output: [1, 2, 3, 4, 5]
// Array of object references:
String[] strArray = new String[] {"John", "Mary", "Bob"};
//output: [John, Mary, Bob]
Run Code Online (Sandbox Code Playgroud) 我想要的是一种将double转换为使用half-up方法进行舍入的字符串的方法 - 即如果要舍入的小数为5,则它总是向上舍入到前一个数字.这是在大多数情况下舍入大多数人所期望的标准方法.
我也希望只显示有效数字 - 即不应该有任何尾随零.
我知道这样做的一种方法是使用该String.format方法:
String.format("%.5g%n", 0.912385);
Run Code Online (Sandbox Code Playgroud)
收益:
0.91239
Run Code Online (Sandbox Code Playgroud)
这很好,但它总是显示5位小数的数字,即使它们不重要:
String.format("%.5g%n", 0.912300);
Run Code Online (Sandbox Code Playgroud)
收益:
0.91230
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用DecimalFormatter:
DecimalFormat df = new DecimalFormat("#.#####");
df.format(0.912385);
Run Code Online (Sandbox Code Playgroud)
收益:
0.91238
Run Code Online (Sandbox Code Playgroud)
但是你可以看到这使用了半均匀舍入.也就是说,如果前一个数字是偶数,它将向下舍入.我想要的是这个:
0.912385 -> 0.91239
0.912300 -> 0.9123
Run Code Online (Sandbox Code Playgroud)
在Java中实现这一目标的最佳方法是什么?
我想获得使用Node JS的连接库包发出的请求的"Host"头.我的代码看起来像:
var app = connect()
.use(connect.logger('dev'))
.use(connect.static('public'))
.use(function(req, res){
var host = req.???
})
.listen(3000);
Run Code Online (Sandbox Code Playgroud)
连接的文档在这里,但我没有看到任何详细说明req上述代码中的对象的API .http://www.senchalabs.org/connect/
编辑:注意一个成功的答案必须指向文档(我需要这个来验证哪个版本提供了我正在寻找的API).
如何在git中恢复一系列提交?从查看gitrevisions文档,我看不出如何指定我需要的范围.例如:
A -> B -> C -> D -> E -> HEAD
Run Code Online (Sandbox Code Playgroud)
我想做相同的:
git revert B-D
Run Code Online (Sandbox Code Playgroud)
结果将是:
A -> B -> C -> D -> E -> F -> HEAD
Run Code Online (Sandbox Code Playgroud)
其中F包含BD的反向.
您将如何迭代地图中的条目,以便可以打印输入键和值?例如,我想做这样的事情:
<ul>
<li ng-repeat='mapEntry in {"First Name":"John", "Last Name":"Smith"}'>
<span>Key: {{mapEntry.key}}, value: {{mapEntry.value}}</span>
</li>
</ul>
Run Code Online (Sandbox Code Playgroud) 在bash中在后台运行进程非常简单.
$ echo "Hello I'm a background task" &
[1] 2076
Hello I'm a background task
[1]+ Done echo "Hello I'm a background task"
Run Code Online (Sandbox Code Playgroud)
但输出结果很冗长.在第一行打印后台任务的作业ID和进程ID,然后我们输出命令,最后我们有作业ID,它的状态和触发作业的命令.
有没有办法抑制运行后台任务的输出,使输出看起来与没有前后的&符号完全一样?即:
$ echo "Hello I'm a background task" &
Hello I'm a background task
Run Code Online (Sandbox Code Playgroud)
我问的原因是我想运行后台进程作为tab-completion命令的一部分,因此该命令的输出必须不间断才有意义.
假设我有一个文本流(或Java中的Reader),我想检查一个特定的字符串.文本流可能非常大,因此一旦找到搜索字符串,我就想返回true并且还试图避免将整个输入存储在内存中.
天真地,我可能会尝试做这样的事情(在Java中):
public boolean streamContainsString(Reader reader, String searchString) throws IOException {
char[] buffer = new char[1024];
int numCharsRead;
while((numCharsRead = reader.read(buffer)) > 0) {
if ((new String(buffer, 0, numCharsRead)).indexOf(searchString) >= 0)
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
当然,如果它出现在1k缓冲区的边界上,则无法检测到给定的搜索字符串:
搜索文本:"stackoverflow"
流缓冲区1:"abc ......... stack"
流缓冲区2:"溢出....... xyz"
如何修改此代码,以便正确地找到跨越缓冲区边界的给定搜索字符串,但不将整个流加载到内存中?
编辑:注意在搜索字符串的流时,我们尝试最小化从流中读取的数量(以避免网络/磁盘中的延迟)并保持内存使用不变,无论流中的数据量如何.字符串匹配算法的实际效率是次要的,但很明显,找到使用这些算法中更有效的算法之一的解决方案会很好.
我目前正在使用JAXB生成java类以解组XML.现在我想创建一个与第一个非常类似的新模式,并使生成的类实现相同的接口.
比方说,我有两个模式文件,用于定义具有相似标签的XML:
adult.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:element name="Person">
<xs:complexType>
<xs:sequence>
<xs:element name="Name" type="xs:string" />
<xs:element name="Age" type="xs:integer" />
<xs:element name="Job" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
Run Code Online (Sandbox Code Playgroud)
kid.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:element name="Person">
<xs:complexType>
<xs:sequence>
<xs:element name="Name" type="xs:string" />
<xs:element name="Age" type="xs:integer" />
<xs:element name="School" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
Run Code Online (Sandbox Code Playgroud)
使用JAXB和XJC我想生成两个类文件:
public class Adult implements Person {
...
public String getName() { ... }
public int getAge() { ... }
public String getJob { ... }
}
public class Kid implements Person …Run Code Online (Sandbox Code Playgroud) 出于健康原因,我喜欢尽量少用鼠标.IntelliJ中的几乎所有常见任务都可以通过键盘快捷键完成,但显示错误消息除外.如何使用键盘快捷键显示突出显示的错误的工具提示?
例如,我有一个错误,例如:

然后我点击[magic-keyboard-command]然后我得到:

在Eclipse中,按F2即可实现.IntelliJ中是否有等价物?
是否可以在Groovy中动态地向对象添加属性或方法?这是我到目前为止所尝试的:
class Greet {
def name
Greet(who) { name = who[0].toUpperCase() + [1..-1] }
def salute() { println "Hello $name!" }
}
g = new Greet('world') // create object
g.salute() // Output "Hello World!"
g.bye = { println "Goodbye, $name" }
g.bye()
Run Code Online (Sandbox Code Playgroud)
但我得到以下异常:
Hello World!
Caught: groovy.lang.MissingPropertyException: No such property: bye for class: Greet
Possible solutions: name
at test.run(greet.groovy:11)
Run Code Online (Sandbox Code Playgroud)