分割字符串并从中获取变量的最佳方法

时间:2016-02-06 09:51:25

标签: java string

我们说我需要阅读一个日志文件。一旦日志文件到达状态为“我是一个重要的日志”的行。需要用那条线做一些事情。

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cellIdentifier = "Cell"
    let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! UserHomeScreenTableViewCell

    // Configure the cell...
    cell.artsAuthorName.text = globalArr[indexPath.row].productAuthor
    cell.priceLabel.text = "\(globalArr[indexPath.row].productPrice)"  
    let productDetailsObject = globalArr[indexPath.row].artImages
    print("@@@@@@@@@@@@@@@@@",productDetailsObject)


    dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {

        if let url = (NSURL(string: self.globalArr[indexPath.row])) {

//The error comes here....in self.global array

            if let data = NSData(contentsOfURL: url) {
                if let image = UIImage(data: data) {
                    dispatch_async(dispatch_get_main_queue()) { () -> Void in
                        cell.artImageView.image = image
                    }
                }
            }
        }
    })



    return cell
}

实现这一目标的最佳方式是什么?

3 个答案:

答案 0 :(得分:2)

我建议使用InputStreamReader来读取文件,然后将其包装在缓冲的阅读器中,如示例所示。由于您说您知道要查找的关键字,因此您可以通过类似方式阅读并使用“包含”来标识该行。

你如何处理这条线将再次取决于你已经知道什么,你不知道什么,以及模式是否一致。如果模式一致,您可以尝试执行拆分/标记化,然后连接相关信息。

如果已知内容的详细信息,请尽可能使用它来识别出现的位置,从而最大限度地减少reg-exp的使用,否则会导致解析比所需更多的数据(而不是太多的关注) )。

如果你正在使用jdk7,那么你就不必过多地处理消耗非gc内存的字符串了,因为来自jdk7 onwards the string is present in the heap

答案 1 :(得分:1)

您可以按照以下方式执行此操作:

  1. 提取TimeStamp
  2. 搜索第一次出现的INFO,然后将子字符串从0带到位置-1。

    1. 提取ID& AnotherValueIWant
    2. 搜索正则表达式模式[0-9, ],然后使用,拆分内容,并将0作为Id1作为AnotherValueIWant

      以下是快速代码段:

      public static void main (String[] args)
      {
          String sample = "2016-02-06 10:19:36,410 INFO  [[RequestMappingHandlerMapping]]: I am an important log [123, 21] ...{.....}";
      
          int position = sample.indexOf("INFO");
          System.out.println("TimeStamp: " + sample.substring(0,position-1));
      
          Pattern MY_PATTERN = Pattern.compile("\\[[0-9, ]+\\]");
          Matcher m = MY_PATTERN.matcher(sample);
          while (m.find()) {
              String str = m.group(0);
              String[] s = str.substring(1,str.length()-2).split(", ");
              System.out.println("Id: " + s[0]);
              System.out.println("AnotherValueIWant: " + s[1]);
          }
      }
      

      输出:

      TimeStamp: 2016-02-06 10:19:36,410
      Id: 123
      AnotherValueIWant: 2
      

答案 2 :(得分:-1)

你也可以这样做:

$('.ui-state-default').blur(function() {
  if ($(this).val() == '') {
    $(this).removeClass('data');
  } else {
    $(this).addClass('data');
  }
})