我有 PHP 代码,我正在将它翻译成 Java,但是我们如何用 Java 来实现像 explode()、list()、foreach() 这样的 PHP?以下 PHP 代码是我的示例问题:
1. PHP:
/**
* @return: Array
*/
public function parse($digest)
{
$array = array();
$parts = explode(", ", $digest);
foreach ($parts as $x)
{
$bits = explode("=", $x);
$data[$bits[0]] = str_replace('"','', $bits[1]);
}
return $array;
}
Java (updated):
private String[] parse(String digest)
{
Map<String,String> array = new HashMap<String, String>();
String[] parts = digest.split(", ");
for (String x:parts)
{
String[] bits = x.split("=");
array.put(bits[0], bits[1].replace( '"','' )); // later will apply regex
}
return array; // incompatible types
}
2. PHP:
/**
* @return: String
*/
public function response($text, $user, $pass, $httpmethod, $uri)
{
list($dummy_digest, $value) = split(' ', $text, 2);
$x = $this->parse($value);
$realm = $x['realm'];
if ($x['qop'] == 'auth')
{
...
}
$base = "{$realm}, {$x['realm']}";
//"Digest username="1", realm="1", nonce="xxxxxx", uri="abc", response="abc", qop="auth", algorithm="MD5", cnonce="", nc="1"";
return $base;
}
Java problem:
public String response(String text, String user, String pass, String httpmethod, String uri)
{
// how to do such list() like php?
return "Digest username="1", realm="1", nonce="xxxxxx", uri="abc", response="abc", qop="auth", algorithm="MD5", cnonce="", nc="1"";
}
最佳答案
它与 java 几乎相同,您可以使用以下方法解析数据:
Map<String, String> key_map = new HashMap<String, String>();
String[] parts_of_string = "var=test, var2=test2".split(", ");
for(String part : parts_of_string) {
String[] key_and_value_parts = part.split("=");
key_map.put(key_and_value_parts[0], key_and_value_parts[1]);
System.out.println(key_and_value_parts[0] + " <-> " + key_and_value_parts[1]);
}
更新(第二种方法):
Java 处理数组的方式与 PHP 不同。 php 可以通过使用像 $array["my_var"] 这样的字符串来引用数组中的对象,而 Java 只能通过它们在数组中的索引来引用。所以你需要使用映射,这允许你将某个键映射到一个值。您可以像这样解析文本:
private static Map<String, String> parse(String digest) {
String[] parts = digest.split(", ");
Map<String, String> map = new HashMap<String, String>();
for (String x : parts) {
String[] bits = x.split("=");
//Remove "'s here if you want to keep them in the string
map.put(bits[0], bits[1]);
}
return map;
}
然后您可以使用 get 方法访问此 map 提供的任何信息。然后您将指定所需的键, map 将返回与该键关联的值。请务必使用 .containsKey 检查 Ma 是否包含您要查找的 key 。
因此,当您使用前面的函数解析了您的信息后,您就可以使用以下函数访问这些值:
Map<String, String> parsed_map = parse("A realm=\"1234\", B=\"3434df323423423\", C=\"300.00\", D=\"loopback\"'");
String info = parsed_map.get("B");
System.out.println(info);
希望对您有所帮助,否则请离开 :D
PS:我还没有实际测试过这个,只是确保检查它是否按预期运行。
关于java - 如何做 PHP explode (", "), list(), foreach() in Java style,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5368510/