问题
I am trying to escape forward slash in String which can be used in path using Java.
For example: String:: "Test/World"
Now I want to use above string path.At the same time I have to make sure that "Test/World"
will come as it is in path. Sorry if its duplicate but I couldn't find any satisfactory solution for this.
My purpose is to use above string to create nodes in Zookeeper.
Example:
If I use following string to create node in Zokkeeper then I should get "Test/World" as a single node not separate. Zookeeper accepts "/" as path separator which in some cases I dont require.
/zookeeper/HellowWorld/Test/World
Thanks
回答1:
You should know about File.separator
... This is safer than \
or /
because Linux and Windows use different file separators. Using File.separator
will make your program run regardless of the platform it is being run on, after all, that is the point of the JVM. -- forward slash will work, however, File.separator
will make you end users more confident that it will.
And you don't need to escape "/
... you should also see the answer to this question
String fileP = "Test" + File.separator + "World";
回答2:
In order to escape a character in Java use "\" for example:
String strPath = "directory\\file.txt".
I believe you do not need to escape forward slashes such as: "/"
回答3:
Let me rephrase your question. You are trying to create a node in zookeeper and it should be /zookeeper/HelloWorld/NodeName. But the last part "NodeName" is actually "Test/World", and you are looking for ways to escape "/" so the node name can be "Test/World".
I don't think it would work escaping the char, unless you tried with unicode.
Try \u002F which is the equivalent for /.
回答4:
I don't know anything about Zookeeper. But it looks to me as though you're trying to keep a list of strings like "zookeeper", "HellowWorld", "Test/World"
, that you then want to use either to create Zookeeper nodes or to create a pathname in a file system. (I'm assuming that if you're working with a file system, you're going to have a subdirectory Test
and a file or subdirectory World
in the Test
subdirectory. If you're actually trying to create a single file or directory named Test/World
, give up. Both Linux and Windows will fight with you.)
If that's the case, then don't try to represent the "path" as a simple String
that you pass around in your program. Instead, represent it as a String[]
or ArrayList<String>
, and then convert it to a filesystem path name only when you need a filesystem path name. Or, better, define your own class with a getFilesystemPath
method. Converting your list of node names to a pathname String
too early, and then trying to reconstruct the list from the String
later, is a poor approach because you throw away data that you need later (in particular, you're throwing away information about which /
characters are separators and which ones are part of node names).
EDIT: If you also need a single path name for Zookeeper, as you mentioned in another comment, I can't help you since I don't know Zookeeper and haven't found anything in a quick look at the docs. If there is a way to escape the slash for Zookeeper, then I still recommend defining your own class, with a getFilesystemPath
method and a getZookeeperPath
method, since the two methods will probably return different String
s in certain cases. The class would internally keep the names as an array or ArrayList
.
回答5:
We are trying to solve exactly the same problem (using filesystem path as node name in zookeeper) a we haven't found a way how to have '/' in node name.
Solution would be either to replace '/' with some character, that cannot appear in your node name. For paths that would be '/' or '\0', which wont help us in this case.
Other possibility is to replace '/' with string of characters allowed in node name, e.g. "Test/World" -> "Test%@World", "Test%World" -> "Test%%World" and add escaping/de-escaping to saving and loading.
If there is any more straightforward way, I'd love to hear it.
来源:https://stackoverflow.com/questions/24643025/how-to-escape-forward-slash-in-java-so-that-to-use-it-in-path