小编Jim*_*son的帖子

Java:如何通过org.w3c.dom.document上的xpath字符串定位元素

如何通过给定org.w3c.dom.document上的xpath字符串快速定位元素/元素?似乎没有FindElementsByXpath()方法.例如

/html/body/p/div[3]/a
Run Code Online (Sandbox Code Playgroud)

我发现,当存在大量同名元素时,递归迭代所有子节点级别会非常慢.有什么建议?

我不能使用任何解析器或库,只能使用w3c dom文件.

java xpath dom

55
推荐指数
1
解决办法
5万
查看次数

Java - 打印2D阵列的最佳方式?

我想知道打印2D阵列的最佳方法是什么.这是我的一些代码,我只是想知道这是不是很好的做法.如果您发现任何其他错误,请更正我在此代码中所犯的任何错误.谢谢!

int rows = 5;
int columns = 3;

int[][] array = new int[rows][columns];

for(int i = 0; i<rows; i++)
    for(int j = 0; j<columns; j++)
        array[i][j] = 0;

for(int i = 0; i<rows; i++)
{
    for(int j = 0; j<columns; j++)
    {
        System.out.print(array[i][j]);
    }
    System.out.println();
}
Run Code Online (Sandbox Code Playgroud)

java printing arrays

52
推荐指数
7
解决办法
23万
查看次数

大型Java系统依赖管理

我们有一个大型(> 500,000 LOC)Java系统,它依赖于40-50个OSS包.系统使用Ant构建,目前手动处理依赖关系管理.我正在调查Ivy和/或Maven以自动化依赖关系.去年我们将Maven看作是一个构建自动化系统并拒绝它,因为它需要完全重构我们的系统以匹配Maven的架构.现在我正在寻求自动化依赖管理任务.

我已经对常春藤进行了一些实验,但遇到了问题.例如,当我将ActiveMQ指定为依赖项,并告诉Ivy使用Maven存储库中的POM进行依赖项规范时,Ivy检索了一堆我知道不需要的包(例如Jetty,Derby和Geronimo)使用ActiveMQ.

如果我在ivysettings.xml中设置usepoms ="false",它只获取activemq.jar,但这似乎打败了Ivy的目的,并将其降级为具有手动构建的依赖规范的简单jar-fetcher.

这里有一个更大的问题,在Windows中曾经被称为"DLL Hell".在某些情况下,两个直接的第一级依赖项将指向相同传递依赖项的不同版本(例如log4j.jar).只有一个log4j.jar可以在类路径中,因此依赖性解析涉及手动确定哪个版本与我们系统中的所有客户端兼容.

我想这一切都归结为每个包的依赖规范(POM)的质量.在ActiveMQ的情况下,没有范围声明,因此任何对ActiveMQ的引用都将下载其所有依赖项,除非我们手动排除我们不知道的那些依赖项.

在log4j的情况下,自动依赖性解析将要求所有log4j的客户端(依赖于log4j的其他包)对所有先前版本的log4j进行验证,并在POM中提供兼容的log4j版本的范围(或列表).这可能太多了.

这是目前的状况,还是我错过了什么?

java dependencies build-process maven-2 ivy

30
推荐指数
3
解决办法
4331
查看次数

带空格的Bash和文件名

以下是一个简单的Bash命令行:

grep -li 'regex' "filename with spaces" "filename"
Run Code Online (Sandbox Code Playgroud)

没问题.以下工作也很好:

grep -li 'regex' $(<listOfFiles.txt)
Run Code Online (Sandbox Code Playgroud)

其中listOfFiles.txt包含要grepped的文件名列表,每行一个文件名.

listOfFiles.txt包含带有嵌入空格的文件名时会出现此问题.在我试过(见下文),所有的情况下,击分裂的空间,以便文件名,例如,在一行listOfFiles.txt 包含类似名称./this is a file.xml最终设法在每一片上运行的grep( ,,./this 和).isafile.xml

我以为我是一个相对先进的Bash用户,但我找不到一个简单的魔术咒语来让这个工作.这是我尝试过的东西.

grep -li 'regex' `cat listOfFiles.txt`
Run Code Online (Sandbox Code Playgroud)

如上所述失败(我真的没想到这会起作用),所以我想我会在每个文件名周围加上引号:

grep -li 'regex' `sed -e 's/.*/"&"/' listOfFiles.txt`
Run Code Online (Sandbox Code Playgroud)

Bash将引号解释为文件名的一部分,并为每个文件提供"No such file or directory"(并且仍然使用空格分割文件名)

for i in $(<listOfFiles.txt); do grep -li 'regex' "$i"; done
Run Code Online (Sandbox Code Playgroud)

这未按原始的尝试(也就是说,它的行为就好像引号被忽略),是非常缓慢的,因为它必须每个文件启动一个"grep"可以替代过程在处理一个调用的所有文件.

以下工作,但如果正则表达式包含shell元字符,则需要一些小心的双重转义:

eval grep -li 'regex' `sed -e 's/.*/"&"/' listOfFiles.txt`
Run Code Online (Sandbox Code Playgroud)

这是构造命令行的唯一方法,以便正确处理带空格的文件名吗?

bash command-line

25
推荐指数
3
解决办法
2万
查看次数

将Optional <Integer>转换为Optional <Long>的好方法

我试图找到一种干净,代码高效的转换Optional<Integer>方式Optional<Long>.我正在使用Guava在Java 7中工作.

所以在代码中的一个地方我创建了一个可选的整数

    Optional<Integer> optionalInt = Optional.fromNullable(someInt);
Run Code Online (Sandbox Code Playgroud)

在另一个领域,我需要它作为一个可选的长.我能想到的最好的事情是:

    Optional<Long> optionalLong = optionalInt.transform(new Function<Integer, Long>() {
        @Override
        public Long apply(Integer inputInt) {
            if (inputInt != null)
                return inputInt.longValue();
            else
                return null;
        }
    });
Run Code Online (Sandbox Code Playgroud)

但这很麻烦,特别是如果你考虑在我使用原始类型时转换类型是多么容易.

有什么好主意吗?

java optional guava java-7

21
推荐指数
1
解决办法
1万
查看次数

警告:在最后一轮中创建的类型为"[在此处插入类]"的文件不会受到注释处理

我将现有的代码库切换到Java 7,我不断收到此警告:

warning: File for type '[Insert class here]' created in the last round 
  will not be subject to annotation processing.
Run Code Online (Sandbox Code Playgroud)

快速搜索显示没有人发出此警告.

它没有在javac编译器源中记录:

从OpenJDK\langtools\src\share\classes\com\sun\tools\javac\processing\JavacFiler.java

private JavaFileObject createSourceOrClassFile(boolean isSourceFile, String name) throws IOException {
    checkNameAndExistence(name, isSourceFile);
    Location loc = (isSourceFile ? SOURCE_OUTPUT : CLASS_OUTPUT);
    JavaFileObject.Kind kind = (isSourceFile ?
                                JavaFileObject.Kind.SOURCE :
                                JavaFileObject.Kind.CLASS);

    JavaFileObject fileObject =
        fileManager.getJavaFileForOutput(loc, name, kind, null);
    checkFileReopening(fileObject, true);

    if (lastRound) // <-------------------------------TRIGGERS WARNING
        log.warning("proc.file.create.last.round", name);

    if (isSourceFile)
        aggregateGeneratedSourceNames.add(name);
    else
        aggregateGeneratedClassNames.add(name);
    openTypeNames.add(name);

    return new FilerOutputJavaFileObject(name, fileObject);
}
Run Code Online (Sandbox Code Playgroud)

这意味着什么以及我可以采取哪些步骤来清除此警告?

谢谢.

java java-7

15
推荐指数
2
解决办法
1606
查看次数

Apache IVY错误消息?:数据未加载时无法获取工件

嘿所有,我在尝试通过scala中的SBT构建项目时遇到以下错误

[info] :: USE VERBOSE OR DEBUG MESSAGE LEVEL FOR MORE DETAILS
java.lang.IllegalStateException: impossible to get artifacts 
    when data has not been loaded. IvyNode = log4j#log4j;1.2.14
Run Code Online (Sandbox Code Playgroud)

我没有看到我的任何项目引用1.2.14,也没有在我的.m2或.ivy存储库中.不知道在哪里寻找这个

完整的错误转储在这里:http://pastebin.com/pM7NUhY0

谢谢

java scala ivy maven sbt

14
推荐指数
1
解决办法
7392
查看次数

Java JVMTI与-Xdebug -Xrunjdwp不兼容

我花了最后4个小时尝试在必须远程运行的Tomcat实例上设置Eclipse TPTP内存分析(即不在Eclipse中).根据TPTP和代理控制器文档,这应该是可能的.

我根据网站上的说明将TPTP组件(4.6.0)安装到我的Eclipse(Galileo)工作台以及代理控制器中.为了启用代理,我在启动Tomcat实例的命令行中添加了以下选项:

-agentlib:JPIBootLoader=JPIAgent:server=enabled;HeapProf:allocsites=true
Run Code Online (Sandbox Code Playgroud)

并将以下目录添加到PATH的前面:

D:\dev\tools\ac\plugins\org.eclipse.tptp.javaprofiler
D:\dev\tools\ac\bin
Run Code Online (Sandbox Code Playgroud)

尝试启动Tomcat时,我始终收到以下错误消息:

ERROR: JDWP unable to get necessary JVMTI capabilities. ["debugInit.c",L279]
Run Code Online (Sandbox Code Playgroud)

我做了很多谷歌搜索,但发现没有相关性; 我尝试重新安装TPTP和各种版本的代理控制器.

最后问题结果是我用"jpda"选项启动Tomcat,catalina.bat转换为

-Xdebug -Xrunjdwp:transport=.....
Run Code Online (Sandbox Code Playgroud)

删除"jpda"命令参数导致JVMTI开始工作.

所以,问题是:我在任何搜索过程中都没有发现任何内容,表明JVMTI代理与调试不兼容.有人可以解释发生了什么以及为什么JVMTI + JDWP不是有效的设置?

java debugging jdwp jvmti

12
推荐指数
1
解决办法
1万
查看次数

Ghostscript真正的黑白转换

我正在尝试将颜色pdf转换为纯黑色和白色tiff,即如果颜色不是白色,我希望它是纯黑色.目前我的色线变得斑驳而微弱,我认为这是由于半色调.有没有办法可以覆盖这种半色调?以下示例.

电流输出:

电流输出

期望的输出:

期望的输出

谢谢.

ghostscript

12
推荐指数
1
解决办法
437
查看次数

如何从fortran代码中删除文件?

我需要从Fortran代码中删除一个文件.我在ubuntu 12.04, x86_64.我不明白为什么下面描述的程序不起作用.请帮助我澄清一下情况(实际上,在某些系统上,它有效,但不适用于我的).

还有另一种方法:我可以直接调用unix命令rm -f file,但我想知道我的方法有什么问题.谢谢.

步骤1.制作简单的脚本del.sh并将其放入〜/ bin

$ cat del.sh
[ $# -ge 1 ] && rm -f $1
$ chmod u+x del.sh; mv del.sh ~/bin 
Run Code Online (Sandbox Code Playgroud)

第2步.Fortran代码,del.for:

character*100 cmd
character*30 file
call getarg(1,file)
write(cmd,100) file
100   format('source del.sh ',a30)
call system(cmd)
end
Run Code Online (Sandbox Code Playgroud)

第3步.编译并运行:

$ ifort -o del del.for
$ ./del file
Run Code Online (Sandbox Code Playgroud)

结果:

sh: 1: source: not found
Run Code Online (Sandbox Code Playgroud)

怎么了?简单的'source del.sh文件'有效,但不是Fortran代码......这令人困惑.

从Fortran代码:

100 format('del.sh ',a30)
100 format('bash del.sh ',a30)
Run Code Online (Sandbox Code Playgroud)

工作完美,但是

100 format('sh del.sh ',a30)
Run Code Online (Sandbox Code Playgroud)

不起作用.我 …

linux bash shell fortran file

10
推荐指数
2
解决办法
1万
查看次数