java - 如何做 PHP explode (", "), list(), foreach() in Java style

标签 java php

我有 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/

相关文章:

Java - 文件读取和分隔符所需的帮助

java - 当我从 Netbeans 运行 JFrame 程序时,印地语字体可见,但在运行 .jar 文件时不可见

java - 用于 Eclipse 的 JSP 可视化设计器插件

php - 如果日期与我的 session 日期匹配,我想插入函数调用

javascript - PHP独立代码块

java - JMock - Expectations block 中方法的唯一子集

java - 方法抛出 'org.hibernate.LazyInitializationException' 异常

PHP - 从字符串中删除所有选项卡

javascript - if (xmlhttp.readyState == 4 && xmlhttp.status == 200) 此条件不起作用

php - cakephp 缓存文件夹在 iis 上不可写