标签: string

将多字节字符串截断为n个字符

我试图在字符串过滤器中使用此方法:

public function truncate($string, $chars = 50, $terminator = ' …');
Run Code Online (Sandbox Code Playgroud)

我期待这个

$in  = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWYXZ1234567890";
$out = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUV …";
Run Code Online (Sandbox Code Playgroud)

还有这个

$in  = "âãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ??????????????????????????????";
$out = "âãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ?????????????????? …";
Run Code Online (Sandbox Code Playgroud)

这是$chars减去$terminator字符串的字符.

此外,滤波器应该在$chars极限以下的第一个字边界切割,例如

$in  = "Answer to the Ultimate Question of Life, the Universe, and Everything.";
$out = "Answer to the Ultimate Question of Life, the …";
Run Code Online (Sandbox Code Playgroud)

我很确定这应该适用于这些步骤

  • 从最大字符中减去终结符中的字符数量
  • 验证该字符串是否长于计算的限制或返回它不变
  • 在字符串下面找到最后一个空格字符,以获得字边界
  • 如果没有找到最后一个空格,则在最后一个空格处剪切字符串
  • 将终结符附加到字符串
  • 返回字符串

但是,我现在尝试了各种组合str*mb_*功能,但都产生了错误的结果.这不是那么困难,所以我显然缺少一些东西.有人会为此分享一个有效的实现,或者指向一个资源,我终于可以理解如何做到这一点.

谢谢

PS是的,我之前已经检查过https://stackoverflow.com/search?q=truncate+string+php :)

php string truncate multibyte

7
推荐指数
2
解决办法
4146
查看次数

使用通配符(GLOB)支持搜索数百万个文件名的更好方法是什么

我正在使用一个小型搜索引擎来显示具有完整路径的匹配文件名.而且重要的是我需要提供通配符(GLOB)搜索*.doc,*list*.xlx或者*timesheet*或者???.doc或类似的东西.

我找到一些相关的解决方案

在小于O(n)的范围内搜索与模式"abc:*:xyz"匹配的字符串

但我正在寻找有效的算法,可以在不到一秒的时间内找到百万个文件名中的匹配,因此比O(n)更好.

我正在考虑两阶段算法,子串数组(后缀数组+前缀数组)搜索第一阶段和正常RegEx搜索通过第一阶段第二阶段的结果.

任何帮助将不胜感激...

string algorithm search glob wildcard

7
推荐指数
1
解决办法
857
查看次数

在C中复制字符串

我对此代码感到困惑:(http://www.joelonsoftware.com/articles/CollegeAdvice.html)

while (*s++ = *t++);
Run Code Online (Sandbox Code Playgroud)

执行的顺序是什么?是*s =*t首先完成,然后它们各自递增?或者其他方式?

谢谢.

编辑:如果是这样的话:

while(*(s++) = *(t++));
Run Code Online (Sandbox Code Playgroud)

while(++*s = ++*t);
Run Code Online (Sandbox Code Playgroud)

c string pointers pointer-arithmetic

7
推荐指数
1
解决办法
521
查看次数

将整数转换为字符串as3

如何将整数转换为字符串值? 这一定很容易."在这方面,雅人最擅长解释." 我还在研究这些愚蠢的柜台.

需要一起加入这个

//My counter project "sends to dynamic text field"
var timer:Timer = new Timer(10);  
var count:int = 0; //start at -1 if you want the first decimal to be 0  
var fcount:int = 0; 

timer.addEventListener(TimerEvent.TIMER, incrementCounter);  
timer.start();  


function incrementCounter(event:TimerEvent) {  
  count++;  
  //
  fcount=int(count*count/10000);//starts out slow... then speeds up 
  //
  var whole_value:int = int(fcount / 100); //change value 
  var tenths:int = int(fcount / 10) % 10;   
  var hundredths:int = int(fcount) % 10;   

  mytext.text = whole_value + " : …
Run Code Online (Sandbox Code Playgroud)

string flash integer actionscript-3

7
推荐指数
2
解决办法
6万
查看次数

iPhone为GET参数解析网址

我有一个从解析xml站点得到的字符串.

http://www.arijasoft.com/givemesomthing.php?a=3434&b=435edsf&c=500
Run Code Online (Sandbox Code Playgroud)

我想有一个NSString函数,可以解析c的值.是否有默认功能或我必须手动编写它.

string iphone

7
推荐指数
2
解决办法
1万
查看次数

我可以在Linux内核模块中使用strtok()吗?

我需要对写入模块的数据进行解析,并且使用string.h的strtok()函数会很有用.但是我试过了

#include <string.h>
Run Code Online (Sandbox Code Playgroud)

#include <linux/string.h>
Run Code Online (Sandbox Code Playgroud)

没有成功.这可能吗?或者我是否必须编写自己的strtok函数?

谢谢

c string module linux-kernel

7
推荐指数
2
解决办法
1万
查看次数

如何在Ada中从其他字符串构建字符串?

我想在日志文件中输出标题行,然后在数据前输出一行" - ".为此,我创建了一个标题字符串,然后输出相同数量的' - '.

但是下面的代码总是因CONSTRAINT_ERROR而失败,因为生成的字符串不是1024个字符.在Ada中,字符串分配需要完全相同的长度而不仅仅是足够的容量.

选项1)是计算确切的长度,但对未来的变化是脆弱的.选项2)是使用String以外的东西.

procedure F() is 
    Msg : String(1..1024);
begin
    Open_Log();
    Msg :=       FLS(" Field1", 12) &
           "|" & FLS(" Field2", 12) &
           "|" & FLS(" Field3", 16);

    Log_To_File("# " & Msg);
    Log_To_File("# " & Fill_String(Msg'Last, '-'));
end;
Run Code Online (Sandbox Code Playgroud)

string ada

7
推荐指数
1
解决办法
3175
查看次数

不可变的只读引用类型和FXCop违规:不要声明只读可变引用类型

我一直试图围绕这个FXCop违规行为"DoNotDeclareReadOnlyMutableReferenceTypes"

MSDN:http://msdn.microsoft.com/en-us/library/ms182302%28VS.80%29.aspx

来自MSDN的代码会导致此违规行为:

namespace SecurityLibrary
{
    public class MutableReferenceTypes
    {
        static protected readonly StringBuilder SomeStringBuilder;

        static MutableReferenceTypes()
        {
            SomeStringBuilder = new StringBuilder();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

从Jon 在这里这里的答案,我理解持有对象引用的字段(在本例中为SomeStringBuilder)是readonly而不是对象本身(由其创建new StringBuilder())

所以以这个例子为例,一旦该字段引用它,我将如何更改对象本身?我喜欢Eric Lippert关于如何更改只读数组的示例,并希望看到类似于任何其他可变引用类型的内容

c# string fxcop readonly immutability

7
推荐指数
2
解决办法
2938
查看次数

在Delphi 7中使用Unicode字符串

我需要编写一个程序,它将浏览各种长度的字符串,并只选择那些使用我定义的集合中的符号(特别是日文字母)编写的程序.字符串将包含用不同语言(德语,法语,阿拉伯语,俄语,英语等)编写的单词.显然有大量可能的角色.我不知道使用哪种结构?我现在正在使用Delphi 7.任何人都可以建议如何编写这样的程序?

delphi string unicode internationalization

7
推荐指数
3
解决办法
1万
查看次数

格式化字母数字字符串

我有一个包含16个字母数字字符的字符串,例如F4194E7CC775F003.我想将其格式化为F419-4E7C-C775-F003.

我试过用

string.Format("{0:####-####-####-####}","F4194E7CC775F003");
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为它不是数值.

所以我想出了以下内容:

public class DashFormatter : IFormatProvider, ICustomFormatter
{
  public object GetFormat(Type formatType)
  {
    return this;
  }

  public string Format(string format, object arg, IFormatProvider formatProvider)
  {
    char[] chars = arg.ToString().ToCharArray();
    StringBuilder sb = new StringBuilder();

    for (int i = 0; i < chars.Length; i++)
    {
      if (i > 0 && i % 4 == 0)
      {
        sb.Append('-');
      }

      sb.Append(chars[i]);
    }

    return sb.ToString();
  }
}
Run Code Online (Sandbox Code Playgroud)

并通过使用

string.Format(new DashFormatter(), "{0}", "F4194E7CC775F003");
Run Code Online (Sandbox Code Playgroud)

我能够解决问题,但是我希望有更好/更简单的方法来解决它?也许一些LINQ魔术?

谢谢.

c# string formatting

7
推荐指数
1
解决办法
2212
查看次数