使用SimpleDateFormat解析ISO8601的日期和时间时,我遇到了一个奇怪的问题.相关代码是:
public class DateHelper
{
private static SimpleDateFormat iso8601formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
public static Date parseISO8601(String date) throws ParseException
{
Date result = iso8601formatter.parse(date);
return result;
}
}
Run Code Online (Sandbox Code Playgroud)
对于输入我给它一个字符串
2010-09-06T15:30:00+02:00
Run Code Online (Sandbox Code Playgroud)
作为回报,我得到一个Date对象,日期设置为2010年1月6日,时间为13:30,时区为GMT + 00:00.
编辑:我也尝试使用"2010-09-06T15:30:00 + 0200",结果相同.
令人困惑的是,日期设置部分正确,只是月份设置错误.
问题显示在Android 1.6和Android 2.2上.
我该如何解决?
我之前从未真正使用Java枚举类来获取常量值,我过去通常使用"公共最终"方法.我现在开始使用枚举,并且我重写了toString()方法以返回与枚举名称不同的值.
我有一些JPA代码,我在其中创建一个带有命名参数的TypedQuery,其中一个是枚举值的String表示.如果我只使用Status.ACTIVE设置参数,我会得到正确的"A"值,但会抛出异常,因为它的类型实际上是Status而不是String.它只有在我显式调用toString()方法时才有效.我认为简单地重写toString()方法会导致返回一个String类型,无论类类型是什么.
这是枚举:
public enum Status {
ACTIVE ("A"),
PENDING ("P"),
FINISHED ("F");
private final String value;
Status(String value) {
this.value = value;
}
public String toString() {
return value;
}
};
Run Code Online (Sandbox Code Playgroud)
这是TypedQuery:
TypedQuery<MechanicTimeEvent> query = entityManager().createQuery("SELECT o FROM MechanicTimeEvent o WHERE o.id.mechanicNumber = :mechanicNumber AND o.id.status = :status", MechanicTimeEvent.class);
query.setParameter("mechanicNumber", mechanicNumber);
query.setParameter("status", Status.ACTIVE.toString());
Run Code Online (Sandbox Code Playgroud) 当我的结果集数据很大时,我得到了
com.ibm.db2.jcc.am.SqlException: [jcc][t4][10120][10898][4.9.78] Invalid operation: result set is closed. ERRORCODE=-4470, SQLSTATE=null异常,但是当我在结果集中尝试使用较少量的数据时却没有
以下是我的代码段
ResultSet rs=null;
String sql_query="select * from exception_main;select * from m_roles"
String query1=sql_query.toUpperCase();
String[] results=query1.split(";");
CSVWriter writer = new CSVWriter(new FileWriter(csv_file_path + csv_file_name), ',',CSVWriter.NO_QUOTE_CHARACTER);
for(int i=0;i<results.length;i++)
{
if(results[i].startsWith("SELECT"))
{
System.out.println("Inside select"+ results[i]);
ps = conn1.prepareStatement(results[i].toString());
rs = ps.executeQuery();
...
//writing to csv file
System.out.println("Count..." + rs.getRow());
writer.writeAll(rs, true);
while(rs.next()){
rs.deleteRow();
}
System.out.println("Count...3:::::::" + rs1.getRow());
}
}
writer.close();
rs.close();
Run Code Online (Sandbox Code Playgroud) 我正在解析文档,我收到以下错误:
Exception in thread "main" java.lang.NumberFormatException: For input string: "null"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1222)
at java.lang.Float.valueOf(Float.java:388)
at CentroidGenerator$Centroid.averageLat(CentroidGenerator.java:403)
at CentroidGenerator.getCentroids(CentroidGenerator.java:30)
at CentroidGenerator.main(CentroidGenerator.java:139)
Run Code Online (Sandbox Code Playgroud)
这是抛出异常的代码的一部分:
if (latitude!=null) {
//if (!latitude.equals("null")) {
String[] latValues = latitude.split(" ");
float sum = 0;
for (int i = 0; i < latValues.length; i++) {
sum = sum + Float.valueOf(latValues[i].trim()).floatValue();
}
latitude = Float.toString(sum / (float) latValues.length);
//}
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我已经尝试检查"null"字符串,但即使取消注释第二个if语句,我也会得到相同的错误.
谢谢
Integer n = 5;
System.out.println(n) // 5!
Run Code Online (Sandbox Code Playgroud)
我怎样才能在我的课程中重现这种行为?
我的mac上有一份Eclipse Indigo.它工作正常,直到我导入了我在另一台计算机上制作的项目.现在我收到类似"java.lang.Object类型无法解析"的错误.和"字符串无法解析为类型".
另外,我构建它的计算机有Java 7,而我稍微破坏的mac有Java 6,并且不会更新.我不确定,但我怀疑这可能是一个问题.
发生了什么,我该如何解决?
UPDATE
我把我认为正确的JRE放在构建路径中,但现在当我运行它时,我得到了这些错误:
Exception in thread "main" java.lang.UnsupportedClassVersionError: Game : Unsupported major.minor version 51.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Run Code Online (Sandbox Code Playgroud) 最近,我对这个答案发表了评论,java.io如果我想使用“纯NIO” ,我应该远离它。
这是简化的代码(复制文件):
private static void copy(File source, File destination) throws IOException {
long length = source.length();
FileChannel input = new FileInputStream(source).getChannel();
FileChannel output = new FileOutputStream(destination).getChannel();
input.transferTo(0, length, output);
output.close();
input.close();
}
Run Code Online (Sandbox Code Playgroud)
(代码极其简化:最终尝试删除并循环执行)
我的问题是如何在FileChannel不使用java.io(FileInputStream)的情况下获取一个或其他NIO类来读取文件?
编辑:
Java 6(或之前)
我想从存储在数组中的方法返回两个值.我该怎么做?
例如:该方法需要返回"un"和"pwd".
我正在从事涉及模拟802.11 MAC协议的无线项目。我在其中使用了随机生成器,问题是我们变得越来越不稳定而不是平滑图,我相信这个错误是由于随机生成器造成的。为了进行测试,我运行了下面的代码,该代码生成0到19之间的100个随机数。如果仔细查看输出,那么会有几个连续的数字相同或非常接近(例如17,15,15,16 ...或1,1 ,...)。这会导致在我们的仿真中发生碰撞,并且相应的吞吐量在该点下降(即,变形)。在这种情况下,增加仿真运行时间并没有太大帮助。
谁能帮我弄清楚如何在Java循环中生成真正随机的n个随机数(没有这种模式)?
这是尝试的代码:
import java.util.Random;
public class RandomTest {
public static void main(String[] args){
int [] counter = new int [20];
Random generator = new Random();
int randomIndex = 0;
for (int i=0; i<100; i++){
randomIndex = generator.nextInt(20);
counter[randomIndex]++;
System.out.println(randomIndex);
}
}
}
Run Code Online (Sandbox Code Playgroud) 所以我无法完成这个程序.该程序应该接受您输入的任何字符串并将字母按字母顺序排序.我认为我的逻辑足够好,但我得到的返回语句错误有点奇怪.必须有一些我忘记的东西.
我得到的错误是(将直接在此下方):
Sorting.Java:26:错误:缺少return语句} ^
import java.util.Scanner;
public class Sorting {
public static void main(String args[]){
Scanner keyboard = new Scanner(System.in);
System.out.println("Enter a String: ");
String s = keyboard.nextLine();
}
static String sort(String s) {
char[] content = s.toCharArray();
java.util.Arrays.sort(content);
String sorted = new String(content);
System.out.println(content);
return char content;
}
}
Run Code Online (Sandbox Code Playgroud) 我有以下代码:
public String replaceValues(String string, HashMap hashMap){
TestHashMap h = new TestHashMap();
String str = new String(h.xmlToString());
Iterator iterator = hashMap.entrySet().iterator();
while(iterator.hasNext()){
HashMap.Entry pair = (HashMap.Entry)iterator.next();
str = str.replaceAll(pair.getKey().toString(), pair.getValue().toString());
}
return str;
}
public static void main(String[] args) {
TestHashMap h = new TestHashMap();
HashMap<String, String> hmap = new HashMap<String, String>();
hmap.put("{username}", "Tudor");
hmap.put("{password}", "Tester123");
System.out.println(hmap);
String replace = h.replaceValues(h.xmlToString(), hmap);
System.out.println(replace);
}
Run Code Online (Sandbox Code Playgroud)
XML文件如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<hashmap>
<request>
<username>{username}</username>
<password>{password}</password>
</request>
</hashmap>
Run Code Online (Sandbox Code Playgroud)
抛出异常:非法重复.但是我没有办法逃避"{}"字符,因为我得到的方法是使用getKey()和getValue()方法,它按预期返回{password}和{username}.然而它打破了String replace = h.replaceValues(h.xmlToString(), hmap) …