我正在寻找标准习语来迭代NSArray.我的代码需要适合OS X 10.4+.
我有一个包含XML的Java字符串,没有换行符或缩进.我想把它变成一个格式很好的XML的字符串.我该怎么做呢?
String unformattedXml = "<tag><nested>hello</nested></tag>";
String formattedXml = new [UnknownClass]().format(unformattedXml);
Run Code Online (Sandbox Code Playgroud)
注意:我的输入是一个字符串.我的输出是一个字符串.
(基本)模拟结果:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<tag>
<nested>hello</nested>
</tag>
</root>
Run Code Online (Sandbox Code Playgroud) 我的代码中的计算经过了充分测试,但由于GUI代码太多,我的整体代码覆盖率低于我的预期.有关单元测试GUI代码的指南吗?它甚至有意义吗?
例如,我的应用程序中有图表.我无法弄清楚如何自动化测试图形.需要人眼AFAIK来检查图表是否正确.
(我正在使用Java Swing)
我从外部进程收到一个字符串.我想使用该String来创建文件名,然后写入该文件.这是我的代码片段:
String s = ... // comes from external source
File currentFile = new File(System.getProperty("user.home"), s);
PrintWriter currentWriter = new PrintWriter(currentFile);
Run Code Online (Sandbox Code Playgroud)
如果s包含无效字符,例如基于Unix的OS中的"/",则会(正确地)抛出java.io.FileNotFoundException.
如何安全地编码String以便它可以用作文件名?
编辑:我希望的是一个API调用,它为我做这个.
我可以做这个:
String s = ... // comes from external source
File currentFile = new File(System.getProperty("user.home"), URLEncoder.encode(s, "UTF-8"));
PrintWriter currentWriter = new PrintWriter(currentFile);
Run Code Online (Sandbox Code Playgroud)
但我不确定URLEncoder是否可靠用于此目的.
我想处理两个数字相乘导致溢出的特殊情况.代码看起来像这样:
int a = 20;
long b = 30;
// if a or b are big enough, this result will silently overflow
long c = a * b;
Run Code Online (Sandbox Code Playgroud)
这是一个简化版本.在真正的程序中,a并b在运行时在其他地方采购.我想要实现的是这样的:
long c;
if (a * b will overflow) {
c = Long.MAX_VALUE;
} else {
c = a * b;
}
Run Code Online (Sandbox Code Playgroud)
您如何建议我最好编码?
更新:a而且b总是在我的场景下非负.
我正在使用Joda解析包含日期/时间的第三方日志文件.日期/时间是两种不同格式之一,具体取决于我正在解析的日志文件的年龄.
目前我的代码如下:
try {
return DateTimeFormat.forPattern("yyyy/MM/dd HH:mm:ss").parseDateTime(datePart);
} catch (IllegalArgumentException e) {
return DateTimeFormat.forPattern("E, MMM dd, yyyy HH:mm").parseDateTime(datePart);
}
Run Code Online (Sandbox Code Playgroud)
这有效但违反了Joshua Bloch关于Effective Java 2nd Edition的建议(第57项:仅在特殊条件下使用例外).它还使得很难确定是否由于日志文件中的日期/时间搞乱而发生IllegalArgumentException.
你能否提出一个不会滥用例外的更好的方法?
我在两个表之间有1:1的关系.我想找到表A中表B中没有相应行的所有行.我使用此查询:
SELECT id
FROM tableA
WHERE id NOT IN (SELECT id
FROM tableB)
ORDER BY id desc
Run Code Online (Sandbox Code Playgroud)
id是两个表中的主键.除了主键索引,我还有一个tableA(id desc)的索引.
使用H2(Java嵌入式数据库),这会导致tableB的全表扫描.我想避免全表扫描.
如何重写此查询以快速运行?我应该用什么指数?
我的Cocoa应用程序需要一些动态生成的小窗口.如何在运行时以编程方式创建Cocoa窗口?
到目前为止,这是我的非工作尝试.我看不到任何结果.
NSRect frame = NSMakeRect(0, 0, 200, 200);
NSUInteger styleMask = NSBorderlessWindowMask;
NSRect rect = [NSWindow contentRectForFrameRect:frame styleMask:styleMask];
NSWindow * window = [[NSWindow alloc] initWithContentRect:rect styleMask:styleMask backing: NSBackingStoreRetained defer:false];
[window setBackgroundColor:[NSColor blueColor]];
[window display];
Run Code Online (Sandbox Code Playgroud) 这段代码始终将日期解析为当前时区,而不是解析为正在解析的字符串中的时区.
final DateTimeFormatter df = DateTimeFormat
.forPattern("EEE MMM dd HH:mm:ss 'GMT'Z yyyy");
final DateTime dateTime = df
.parseDateTime("Mon Aug 24 12:36:46 GMT+1000 2009");
System.out.println("dateTime = " + dateTime);
// outputs dateTime = 2009-08-24T04:36:46.000+02:00
Run Code Online (Sandbox Code Playgroud)
它输出:
dateTime = 2009-08-24T04:36:46.000+02:00
Run Code Online (Sandbox Code Playgroud)
而我期望:
dateTime = 2009-08-24T04:36:46.000+10:00
Run Code Online (Sandbox Code Playgroud)
我有什么想法我做错了吗?
java ×5
cocoa ×2
jodatime ×2
objective-c ×2
sql ×2
datetime ×1
encoding ×1
enumeration ×1
exception ×1
file ×1
h2 ×1
iteration ×1
long-integer ×1
math ×1
merge ×1
mysql ×1
nsarray ×1
nswindow ×1
optimization ×1
overflow ×1
parsing ×1
pretty-print ×1
string ×1
timezone ×1
unit-testing ×1
xml ×1