【发布时间】:2015-02-10 09:59:40
【问题描述】:
我知道 String 是不可变的。但是,出于这个原因,我不明白为什么以下代码有效(来自 Oracle 的代码示例)。我指的是“path = path.replace(sep, '/');”这一行有人可以帮忙解释一下吗?
import oracle.xml.parser.v2.*;
import java.net.*;
import java.io.*;
import org.w3c.dom.*;
import java.util.*;
public class XSDSample
{
public static void main(String[] args) throws Exception
{
if (args.length != 1)
{
System.out.println("Usage: java XSDSample <filename>");
return;
}
process (args[0]);
}
public static void process (String xmlURI) throws Exception
{
DOMParser dp = new DOMParser();
URL url = createURL (xmlURI);
// Set Schema Validation to true
dp.setValidationMode(XMLParser.SCHEMA_VALIDATION);
dp.setPreserveWhitespace (true);
dp.setErrorStream (System.out);
try
{
System.out.println("Parsing "+xmlURI);
dp.parse (url);
System.out.println("The input file <"+xmlURI+"> parsed without
errors");
}
catch (XMLParseException pe)
{
System.out.println("Parser Exception: " + pe.getMessage());
}
catch (Exception e)
{
System.out.println("NonParserException: " + e.getMessage());
}
}
// Helper method to create a URL from a file name
static URL createURL(String fileName)
{
URL url = null;
try
{
url = new URL(fileName);
}
catch (MalformedURLException ex)
{
File f = new File(fileName);
try
{
String path = f.getAbsolutePath();
// This is a bunch of weird code that is required to
// make a valid URL on the Windows platform, due
// to inconsistencies in what getAbsolutePath returns.
String fs = System.getProperty("file.separator");
if (fs.length() == 1)
{
char sep = fs.charAt(0);
if (sep != '/')
path = path.replace(sep, '/');
if (path.charAt(0) != '/')
path = '/' + path;
}
path = "file://" + path;
url = new URL(path);
}
catch (MalformedURLException e)
{
System.out.println("Cannot create url for: " + fileName);
System.exit(0);
}
}
return url;
}
}
【问题讨论】:
标签: java string immutability