小编pet*_*ust的帖子

ANTLR语法中是否有保留字列表?

我最近创建了一个ANTLR3解析器规则

options : foo bar;
Run Code Online (Sandbox Code Playgroud)

它没有编译,我花了一些时间才发现这options是一个保留字(AntlrWorks表示错误,但不是为什么).ANTLR中是否有保留字列表,是否有命名规则的最佳实践(这可能有助于避免这种情况)?

antlr

4
推荐指数
1
解决办法
1968
查看次数

使用HTTP读取文件的第一部分

我想通过阅读文件的第一部分并分析内容来确定文件的类型(通常是UTF-8).(该类型特定于我的社区,但不在我的控制之下,并且不包含在MIME/MediaType中,通常是TEXT_PLAIN).我正在使用客户端上的'org.restlet'库来分析标头

Request request = new Request(Method.HEAD, url);
Run Code Online (Sandbox Code Playgroud)

所以我知道内容长度,并且可以(如果必要和可能)估计我应该为分析下载多少字节

澄清:我无法使用MediaType.从答案1看起来我必须得到内容.因此,修订后的问题是:

"我可以使用Restlet 获取文件的一部分吗?"

答案:以下代码可以满足我的需求.我已经将@BalusC归功于这种方式.如果我错过了任何内容,请评论:

public String readFirstChunk(String urlString, int byteCount) {
    String text = null;
    if (urlString != null) {
        org.restlet.Client restletClient = new org.restlet.Client(Protocol.HTTP);
        Request request = new Request(Method.GET, urlString);
        List<Range> ranges = Collections.singletonList(new Range(0, byteCount));
        request.setRanges(ranges);
        Response response = restletClient.handle(request);
        if (Status.SUCCESS_OK.equals(response.getStatus())) {
            text = processSuccessfulChunkRequest(response);
        } else if (Status.SUCCESS_PARTIAL_CONTENT .equals(response.getStatus())) {
            text = processSuccessfulChunkRequest(response);
        } else {
            System.err.println("FAILED "+response.getStatus());
        }
    }
    return text;
}

private String processSuccessfulChunkRequest(Response …
Run Code Online (Sandbox Code Playgroud)

java http restlet

4
推荐指数
1
解决办法
4204
查看次数

识别正则表达式模式中的捕获组

Java中是否有一种方法(可能还有一个额外的开源库)来识别a中的捕获组java.util.regex.Pattern(即在创建匹配器之前)

Java文档中的示例:

捕获组通过从左到右计算它们的左括号来编号.在表达式((A)(B(C)))中,例如,有四个这样的组:

1         ((A)(B(C)))
2         (A)
3         (B(C))
4         (C)
Run Code Online (Sandbox Code Playgroud)

原则上应该可以从(编译的)模式中识别这些.

更新:从@Leniel和eslewhere看来,这个工具("命名组")将在2011年中期出现在Java 7中.如果我不能等待,我可以使用jregex虽然我不太确定API是什么是.

java regex capture-group

4
推荐指数
1
解决办法
4347
查看次数

从Java编写excel文件的最佳方法是什么?

你们建议用什么库从Java编写excel文件?它必须是纯Java解决方案,因此它可以在任何平台上运行.

谢谢,格雷

编辑:它不能是CSV文件格式.它必须有列标题,数据格式类型等.

java excel file-io file-format jexcelapi

4
推荐指数
1
解决办法
2170
查看次数

二分图中的最佳匹配(例如,将标签与点上的点相关联)

我试图从图形xy图中提取语义,其中绘制点并且一些或全部都有标签.标签被绘制成"靠近点",这样人类通常可以理解哪个标签与哪个点相关.例如,在该图中,清楚哪个标签(数字)属于哪个点(*),并且基于欧几里德距离的算法将起作用.(标签和点没有语义排序 - 例如散点图)

 *1
    *2

        *3

      *4
Run Code Online (Sandbox Code Playgroud)

在拥挤的图中,创作软件/人可以将标签放置在不同的方向上以避免重叠.例如在

1**2
 **4
 3
Run Code Online (Sandbox Code Playgroud)

人类读者通常可以确定哪个标签与哪个标签相关联.

我接受的一个解决方案是创建欧几里德距离矩阵并对行进行混洗以获得函数的最小值(例如,对角线或其他启发式上的距离的总和平方).在第二个例子中(从NW角顺时针标记为a,b,c,d的点),我们有一个距离矩阵(到1 dp)

             a   b   c   d
 1ab2    1  1.0 2.0 2.2 1.4    
  dc4    2  2.0 1.0 1.4 2.2
  3      3  2.0 2.2 1.4 1.0
         4  2.2 1.4 1.0 2.0
Run Code Online (Sandbox Code Playgroud)

我们需要贴上标签a1 b2 c4 d3.交换行3和4给出了对角线的最小总和.这是一个更复杂的例子,简单地选择最近的可能会失败

 *1*2*5
  **4
  3 *6
Run Code Online (Sandbox Code Playgroud)

如果这个问题得到解决,那么我需要去看标签数量可能小于或大于点数的情况.

如果算法是标准的,那么我会欣赏指向开源Java的指针(例如JAMA或Apache数学)

注意:这个SO答案将附近的点与路径相关联并不能作为答案,因为给出了通过点的路径.

mapping algorithm plot bipartite

4
推荐指数
1
解决办法
2624
查看次数

SVG中的下标和上标

我正在尝试使用此站点中的以下代码显示SVG的子上标和上标

<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<g>
    <text x = "10" y = "25" font-size = "20">
        <tspan>
            e = mc 
            <tspan baseline-shift = "super">2</tspan>
        </tspan>
        <tspan x = "10" y = "60">
            T 
            <tspan baseline-shift = "sub">i+2</tspan>
            =T 
            <tspan baseline-shift = "sub">i</tspan>
            + T 
            <tspan baseline-shift = "sub">i+1</tspan>
        </tspan>
    </text>
</g>
Run Code Online (Sandbox Code Playgroud)

但是子/上标不会在IE或Firefox中显示.这是未实现还是存在其他问题?[你能看到下标显示正确吗?]

svg

4
推荐指数
1
解决办法
5239
查看次数

从贝塞尔曲线重建圆

我试图从Postscript/SVG路径重建原始图形基元.因此,原始圆圈(在SVG标记中)呈现为:

   <path stroke-width="0.5" d="M159.679 141.309 
        C159.679 141.793 159.286 142.186 158.801 142.186 
        C158.318 142.186 157.925 141.793 157.925 141.309 
        C157.925 140.825 158.318 140.432 158.801 140.432 
        C159.286 140.432 159.679 140.825 159.679 141.309" />
Run Code Online (Sandbox Code Playgroud)

这是使用4个贝塞尔曲线创建圆的近似值.在其他地方,圆弧由链接的贝塞尔曲线近似.

我的问题是,是否有一种算法可以用来识别这个结构并重建"最佳"圆.我不介意小错误 - 最坏的情况是二阶.

更新:请注意,我不知道这是一个圆圈或圆弧 - 它可能是任何东西.曲线上可能有2,3,4或甚至更多的点.所以我真的很喜欢这种类型的功能:

error = getCircleFromPath(path)
Run Code Online (Sandbox Code Playgroud)

哪里error会尽早表明这是否可能是一个圆圈.

[我同意,如果我知道它是一个圆圈,这是一个更容易的问题.]

更新:@george在某种程度上回答了我的问题,但我不认为这是整个故事.

在转换为原点和归一化后,我似乎在曲线上有以下四点:

point [0, 1] with control point at [+-d,1] // horizontal tangent
point [1, 0] with control point at [1,+-d] // vertical tangent
point [0, -1] with control point at [+-d,-1] // horizontal tangent
point …
Run Code Online (Sandbox Code Playgroud)

svg bezier postscript

4
推荐指数
1
解决办法
1648
查看次数

Multimaps中的Java Generics擦除

我有两个MultimapString通过(i)索引小号IntegerS和(ⅱ)DoubleS和一个例程到的输出列出String秒.

public static void outputInteger(Multimap<Integer, String> map) {
    for (Integer key : map.keySet()) {
        Collection<String> strings = map.get(key);
        output(strings);
    }
}

public static void outputDouble(Multimap<Double, String> map) {
    for (Double key : map.keySet()) {
        Collection<String> strings = map.get(key);
        output(strings);
    }
}
Run Code Online (Sandbox Code Playgroud)

我想用这些组合成一个单一的程序Number为一体的超IntegerDouble

public static void outputNumber(Multimap<? extends Number, String> map) {
    for (Number key : map.keySet()) {
        Collection<String> ids = map.get(key); //** 
    }
}
Run Code Online (Sandbox Code Playgroud)

但是星号线不能编译 …

java generics guava

4
推荐指数
3
解决办法
400
查看次数

maven中的OutOfMemoryError和GC开销限制,但不是eclipse

我正在开发一个程序来处理PDF和SVG文档(几兆字节),并且可以在Eclipse(Windows)上成功运行应用程序,其中包含一些包含多个文档的循环.根据Windows任务管理器,它似乎没有为每个文档占用更多内存,并使用不到1 GB.但是在Maven上,它会为第一个文档抛出OOME或GC开销(典型的surefire报告,并不总是在同一个地方失败).

Tests run: 5, Failures: 0, Errors: 1, Skipped: 3, Time elapsed: 14.271 sec <<< FAILURE!
testPDFAnalyzerDIR(org.xmlcml.svg2xml.analyzer.PDFAnalyzerTest)  Time elapsed: 14.259 sec  <<< ERROR!
java.lang.OutOfMemoryError: Java heap space
    at sun.nio.cs.UTF_8.newDecoder(UTF_8.java:49)
    at java.lang.StringCoding$StringDecoder.<init>(StringCoding.java:116)
    at java.lang.StringCoding$StringDecoder.<init>(StringCoding.java:108)
    at java.lang.StringCoding.decode(StringCoding.java:167)
    at java.lang.String.<init>(String.java:443)
    at java.lang.String.<init>(String.java:515)
    at nu.xom.Text.getValue(Unknown Source)
    at org.xmlcml.graphics.svg.SVGElement.createSubclassedChildren(SVGElement.java:195)
Run Code Online (Sandbox Code Playgroud)

我已阅读了大量的SO答案,并在Windows环境变量中设置了MAVEN_OPTS

C:\Users\pm286\workspace\svg2xml-dev>echo %MAVEN_OPTS%
-Xmx2048m -XX:+UseGCOverheadLimit
Run Code Online (Sandbox Code Playgroud)

为什么Eclipse不会失败(似乎有足够的内存)并且maven还有进一步的解决方法吗?我很欣赏我将不得不去寻找内存泄漏和其他低效率,但我希望通过测试获得正确的操作,而不是性能.有没有什么方法可以从程序中获得调试输出,从而导致可靠的报告,所以我可以告诉现在的历史?

Maven细节:

C:\Users\pm286\workspace\svg2xml-dev>mvn -version
Apache Maven 3.0.3 (r1075438; 2011-02-28 17:31:09+0000)
Maven home: C:\Program Files\maven\bin\..
Java version: 1.6.0_24, vendor: Sun Microsystems Inc.
Java home: C:\Program Files\java\jdk1.6.0_24\jre
Default locale: en_GB, platform encoding: …
Run Code Online (Sandbox Code Playgroud)

java eclipse garbage-collection out-of-memory maven

4
推荐指数
1
解决办法
7695
查看次数

使用代理对创建和使用字符串

我必须使用上面的代码点0FFFF(特别是数学脚本字符),并且没有找到关于如何执行此操作的简单教程.我希望能够(a)创建String具有高代码点的s和(b)迭代其中的字符.由于char无法保持这些点,我的代码如下:

    @Test
public void testSurrogates() throws IOException {
    // creating a string
    StringBuffer sb = new StringBuffer();
    sb.append("a");
    sb.appendCodePoint(120030);
    sb.append("b");
    String s = sb.toString();
    System.out.println("s> "+s+" "+s.length());
    // iterating over string
    int codePointCount = s.codePointCount(0, s.length());
    Assert.assertEquals(3, codePointCount);
    int charIndex = 0;
    for (int i = 0; i < codePointCount; i++) {
        int codepoint = s.codePointAt(charIndex);
        int charCount = Character.charCount(codepoint);
        System.out.println(codepoint+" "+charCount);
        charIndex += charCount;
    }
}
Run Code Online (Sandbox Code Playgroud)

我觉得这完全正确或最干净的方式让我感到不舒服.我本来期望的方法,codePointAfter()但只有一个codePointBefore().请确认这是正确的策略或提供替代策略.

更新:感谢@Jon的确认.我为此苦苦挣扎 - …

java string unicode

4
推荐指数
1
解决办法
552
查看次数