【问题标题】:Best way to embed data fields in text?在文本中嵌入数据字段的最佳方法?
【发布时间】:2010-02-18 23:27:32
【问题描述】:

在文本中嵌入数据字段以便它们易于检索且不影响可读性(太多)的最佳方法是什么?

例如,我可以做类似的事情 “这里有一些指令,后跟@firstname:John @lastname:Smith\n”,然后编写代码解析出字段。然后我可以开始解决问题,比如嵌入的@-signs。

但这已经被做了几千次了,我希望有人能指出一个固定的模式。

【问题讨论】:

    标签: text field


    【解决方案1】:

    将根据您的问题进行猜测,如果我误解了,请告诉我...

    您会希望使用可以通过正则表达式和/或变量替换轻松获取的内容。它也应该是您在文本中不经常使用的字符。

    诸如“你好 ${firstName} 你今天过得怎么样?”,或者更简单地说“你好 {0} 怎么了?”

    某些语言已经内置了对此的支持,因此这取决于您的环境。

    【讨论】:

      【解决方案2】:

      正如迈克所说,这取决于环境。在 .NET 中有“Hello {0}”,几种语言使用“Hello %s”,使用 MooTools 的 JavaScript 使用“Hello {name}”等等。 “{0}”和“%s”都取决于参数的顺序(这可能是一个缺点)。

      如果您对如何自己实现它感兴趣,这里有一个在 javascript 中使用正则表达式的示例:

      // Variables should be an object at the current form:
      // {name: 'John', age: 13}
      function substitute(string, variables)
      {
          var result = string.replace(/\\?\{([^{}]+)\}/g, function(match, name) {
              if(match.charAt(0) == '\\') return match.slice(1); //If there was a backslash before the first {, just return it as it was.
              return (variables[name] != undefined) ? variables[name] : '';
          });
          return result;
      }
      

      不应该硬移植到支持正则表达式的其他语言。

      【讨论】:

        【解决方案3】:

        也许有点小技巧,但如果这只是为消息或国际化(等)格式化某些文本的简单要求,您可能会滥用 String.format() (在 java 中,大概那些 windows 语言有类似的东西) ,它采用可变参数或数组参数,如下所示:

        String text = "Hello %s, do you still live at %s?";
        String[] replacements = {
            user.name(),
            user.address()
        };
        
        String formatted = String.format(text, replacements);
        

        唯一的问题当然是你不能指定参数的顺序,只是它们出现的位置。这可能是也可能不是问题,但如果不是,这可能是最快的解决方案。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-09-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-02-23
          • 1970-01-01
          • 2011-07-09
          相关资源
          最近更新 更多