我想将前缀为货币符号的可能十进制值转换为仅数值.
例如 -
值可以像以下任何一样
String s1 = "£32,847,676.65";
String s2 = "£3,456.00";
String s3 = "£831,209";
Run Code Online (Sandbox Code Playgroud)
我希望转换后的结果像 - 32847676.65,3456.00和831209.
我尝试用parse()这种方式使用NumberFormat的方法 -
NumberFormat nf = NumberFormat.getCurrencyInstance(Locale.UK);
numberFormat.setMinimumFractionDigits(2);
Number num = nf.parse(s1);
double dd = num.doubleValue();
BigDecimal gg = new BigDecimal(dd);
System.out.println(gg);
Run Code Online (Sandbox Code Playgroud)
但结果是 - 32847676.649999998509883880615234375这不完全是正确的.
我需要它是数字,所以我可以执行某种计算.
你们可以指导我,我还能尝试什么
我以下列方式在java中使用Transformer类 -
1 Transformer transformerFinal = tFactory.newTransformer(new StreamSource(finalStylesheet));
2 transformerFinal.setParameter("Date", sdf.format(myDate));
3 transformerFinal.transform(new StreamSource(tempFilename), new StreamResult(new FileOutputStream(finalFilename)));
Run Code Online (Sandbox Code Playgroud)
然后我想删除用于转换的源文件.
4 File fileToDelete = new File(tempFilename);
5 fileToDelete.delete();
Run Code Online (Sandbox Code Playgroud)
它不起作用,我的意思是该文件不会被删除.
但是,如果在line 3我传递o/p流的局部变量即.
1 FileOutputStream fos = new FileOutputStream(finalFilename);
4 transformerFinal.transform(new StreamSource(tempFilename), new StreamResult(fos));
5 fos.close();
Run Code Online (Sandbox Code Playgroud)
现在删除功能有效,它确实删除了该文件.
所以,我是否正确,当我得出结论,在此transform过程中o/p流没有隐式关闭?因此我必须明确地关闭流.
任何人都可以分享,如果有任何其他原因该文件可能不会被删除?
请假设所有变量都具有正确的值.
谢谢.
更新
还有一点我注意到了.
我从另一个类调用此代码,例如.-
public class ClassTwo {
public void ameth(String tempFilename) {
// the above mentioned transformation code
}
}
1 public class ClassOne {
2 public void method1() …Run Code Online (Sandbox Code Playgroud) 给定以下场景,其中 xml、Geography.xml 看起来像 -
<Geography xmlns:ns="some valid namespace">
<Country>
<Region>
<State>
<City>
<Name></Name>
<Population></Population>
</City>
</State>
</Region>
</Country>
</Geography>
Run Code Online (Sandbox Code Playgroud)
以及以下示例 java 代码 -
InputStream is = new FileInputStream("C:\\Geography.xml");
SAXBuilder saxBuilder = new SAXBuilder();
Document doc = saxBuilder.build(is);
XPath xpath = XPath.newInstance("/*/Country/Region/State/City");
Element el = (Element) xpath.selectSingleNode(doc);
boolean b = doc.removeContent(el);
Run Code Online (Sandbox Code Playgroud)
该removeContent()方法不会City从 的内容列表中删除该元素doc。b 的值是false
我不明白为什么它不删除 Element,我什至尝试从 xml 中删除Name&元素只是为了看看这是否是问题,但显然不是。
我尝试的另一种方法,我不知道为什么我知道它没有本质上的不同,仍然只是为了使用- PopulationParent
Parent p = el.getParent();
boolean s = p.removeContent(new Element("City"));
Run Code Online (Sandbox Code Playgroud)
可能是什么问题?以及可能的解决方案?如果有人可以分享该方法的真实行为removeContent() …
我有一个java程序,它针对2种不同的场景抛出了2个不同消息的异常,我希望Junit测试用例检查这两个消息是否相等.举个例子 -
public void amethod() {
// do some processing
if(scenario1 == true) {
throw new MySystemException("An error occured due to case 1 being incorrect.");
}
else if(scenario2 == true) {
throw new MySystemException("An error occured as case 2 could not be found");
}
}
Run Code Online (Sandbox Code Playgroud)
现在JUnit就像这样 -
public void testAMethod() {
// do something
assertEquals("Expected", "Actual");
}
Run Code Online (Sandbox Code Playgroud)
据我所知,在上面的例子中,如果我使用Scenario1异常消息,则在抛出异常时junit将失败,Scenario2反之亦然.
我想知道Junit中是否提供了其他方法,我可以使用这个方法test method并检查测试通过的两个消息?如果可能
的话OR,像这样的预期消息提供"预期"值.
我希望我的查询足够清楚.
谢谢
UPDATE
对于延迟回复感到抱歉,已经遇到了其他一些紧急事项.
谢谢大家提出的非常好的建议,它现在帮助我更好地理解了.
最后,为了保持相当简单,我决定实施Don Roby建议的类似解决方案.所以创建了一个新的测试类,看起来像 -
public void testAMethodScenario1() …Run Code Online (Sandbox Code Playgroud) 在java应用程序中,我使用.properties文件来访问与应用程序相关的配置属性.
例如.
AppConfig.properties其中的内容是,
settings.user1.name=userone
settings.user2.name=usertwo
settings.user1.password=Passwrd1!
settings.user2.password=Passwrd2!
Run Code Online (Sandbox Code Playgroud)
我通过java文件访问这些属性 - AppConfiguration.java比如
private final Properties properties = new Properties();
public AppConfiguration(){
properties.load(Thread.currentThread().getContextClassLoader()
.getResourceAsStream("AppConfig.properties"));
}
Run Code Online (Sandbox Code Playgroud)
现在,我不想将所有键值属性保存在一个文件中,而是将它们分成几个文件(AppConfig1.properties,AppConfig2.properties,AppConfig3.properties等).
我想知道是否可以同时加载这些多个文件.
我的问题与Java项目中的多个.properties文件不相似
谢谢.
是否可以在将请求从一个servlet转发到另一个servlet时更改Servlet请求对象?或者为实现这个目标而努力?
我有2个servlet,Servlet1和Servlet2,例如 -
public class Servlet1 extends HttpServlet {
doPost(HttpServletRequest rq, HttpServletResponse rs) {
// do something meaningful, call other different web-apps/servlets
InputStream is1 = rq.getInputStream();
RequestDispatcher rd = getServletContext().getRequestDispatcher("/Servlet2");
rd.forward(rq, rs);
}
}
Run Code Online (Sandbox Code Playgroud)
如果我打印is1它就像 -
-----Part2_324<?xml version="1.0" encoding="utf-8"?><Head><Body><Text>This is the first File</Text></Body></Head>-------Part2_65623
Run Code Online (Sandbox Code Playgroud)
我不关心这个o/p,稍后将请求转发给Servlet2.
我有一个xml文件file2.xml,内容是 -
<?xml version="1.0" encoding="utf-8"?><Head><Body><Top>Start</Top><Middle>Process</Middle><Bottom>End</Bottom></Body></Head>
Run Code Online (Sandbox Code Playgroud)
我希望这可以作为请求内容Servlet2,因为它无法处理内容is1,它意味着要处理file2.xml的内容.
几乎没有设置属性/参数.
是否有可能实现这一目标?我希望,问题很清楚.
谢谢
我想快速有效地列出单个目录中包含的大量文件(10,2万左右).我已经阅读了很多帖子,特别是在这里解释了Java实现这一目标的短暂内容,主要是由于底层文件系统(可能Java 7有一些答案).这里的一些帖子提出了本机调用或管道等替代方案,我确实理解在正常情况下最好的选项是java调用 - String [] sList = file.list(); 这比file.listFiles()略胜一筹; 此外,有人建议使用多线程(也是Executor服务).
那么,问题在于我对如何编写多线程方式的实用技巧很少.所以我的逻辑肯定是不正确的.不过,我试过这种方式:
像这样的东西,来电者班 -
String[] strList = null;
for (int i = 0; i < 5; i++){
ThreadLister tL = new ThreadLister(fit);
threadList.add(tL);
}
for (int j = 0; j < threadList.size(); j++) {
thread = threadList.get(j);
thread.start();
thread.sleep(500);
}
strList = thread.fileList;
Run Code Online (Sandbox Code Playgroud)
和Thread类 -
public String[] fileList;
public ThreadLister(File f) {
this.f = f;
}
public void run() {
fileList = f.list();
}
Run Code Online (Sandbox Code Playgroud)
我猜这可能与多线程有关.我非常感谢我对多线程要求的解决方案.增加的好处是我将学习更多关于实际多线程的知识.
查询更新
嗯,显然多线程不会帮助我(我现在意识到它实际上不是一个解决方案).感谢您帮我排除线程.
所以我试过, …
exec jar可能是一个非常常见的问题.我正在尝试创建并运行一个可执行jar,它让我疯狂.
我有几个类(包stmts),其中一个有一个main方法,一个简单的空构造函数和几个biz方法,这些构成了一个小eclipse项目的一部分.
我使用build.xml将这些和清单文件捆绑到jar(arc.jar)中.我的程序使用jdom库以及我的其他一个eclipse项目的引用,所以我在构建我的arc.jar时包括了jdom libray和其他商业库.
这是我写的Manifest.MF,有一个新的后续Main-Class
Manifest-Version: 1.2
Class-Path: jdom.jar other.jar
Main-class: uk.co.Art
Run Code Online (Sandbox Code Playgroud)
当我解压缩这个arc.jar时,它包含jdom.jar,other.jar,META-INF/Manifest.mf以及包含我的类的包.有趣的是,jar中的Manifest文件看起来像这样 -
Manifest-Version: 1.2
Created-By: 14.2-b01 (Sun Microsystems Inc.)
Main-class: uk.co.Art
Class-Path: jdom.jar other.jar
Run Code Online (Sandbox Code Playgroud)
ClassNotFoundException: uk.co.Art当Main类的值没有包时,我得到了ClassNotFoundException .使用包时错误更改为ClassNotFoundException: org.jdom.JDOMException.
所以只是为了测试目的,我尝试c:\为我的执行类和jar 提供完整路径,但仍然无法找到主类,错误输出ClassNotFoundException: uk.co.Art.
我似乎无法理解为什么.
我使用的命令行是 - java -jar Arc.jar
cmd提示符下的版本是 -
而eclipse安装的jre是jre6
java version "1.6.0_16"
Java(TM) SE Runtime Environment (build 1.6.0_16-b01)
Java HotSpot(TM) Client VM (build 14.2-b01, mixed mode)
你们有什么人建议的?
Alex的解决方案确实解决了本地执行的问题.
我还想到另一种方式(作为一个额外的选项)执行,在服务器上部署Arc.jar并在该机器上运行批处理,基本上设置java类路径,然后调用jar或直接调用类,无论它是哪种方式作品.But its only an option, not a preferred one though. …