精华内容
下载资源
问答
  • 像上面这样(截取贴吧),当字符长度超过固定像素宽度时,截取像素宽度范围内的字符串,并在字符串后加省略号。mb_strlen函数只能获取字符数,而英文和中文一个字符所占宽度不一样,不能根据字符数来确定,不...

    bVluUK

    像上面这样(截取贴吧的),当字符长度超过固定的像素宽度时,截取像素宽度范围内的字符串,并在字符串后加省略号。mb_strlen函数只能获取字符数,而英文和中文一个字符所占的宽度不一样,不能根据字符数来确定,不知道该怎么实现?

    回复内容:

    bVluUK

    像上面这样(截取贴吧的),当字符长度超过固定的像素宽度时,截取像素宽度范围内的字符串,并在字符串后加省略号。mb_strlen函数只能获取字符数,而英文和中文一个字符所占的宽度不一样,不能根据字符数来确定,不知道该怎么实现?

    那个可以通过 CSS 来控制的… http://jsfiddle.net/sc7uk5bw/

    //截取字符串

    function msubstr($str, $start=0, $length, $charset="utf-8", $suffix=true){

    if(function_exists("mb_substr")){

    if($suffix){

    return mb_substr($str, $start, $length, $charset);

    }else{

    return mb_substr($str, $start, $length, $charset);

    }

    }elseif(function_exists('iconv_substr')) {

    if($suffix){

    return iconv_substr($str,$start,$length,$charset);

    }else{

    return iconv_substr($str,$start,$length,$charset);

    }

    }

    $re['utf-8'] = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";

    $re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";

    $re['gbk'] = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";

    $re['big5'] = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";

    preg_match_all($re[$charset], $str, $match);

    $slice = join("",array_slice($match[0], $start, $length));

    if($suffix){

    return $slice;

    }else{

    return $slice;

    }

    }

    给一个我平时用来截取字符串的方法吧,支持中英文

    php// 截取字符串

    public static function mix_substr($str, $len = 12, $dot = true) {

    $i = 0;

    $l = 0;

    $c = 0;

    $a = array();

    while ($l < $len) {

    $t = substr($str, $i, 1);

    if (ord($t) >= 224) {

    $c = 3;

    $t = substr($str, $i, $c);

    $l += 2;

    } elseif (ord($t) >= 192) {

    $c = 2;

    $t = substr($str, $i, $c);

    $l += 2;

    } else {

    $c = 1;

    $l++;

    }

    // $t = substr($str, $i, $c);

    $i += $c;

    if ($l > $len) break;

    $a[] = $t;

    }

    $re = implode('', $a);

    if (substr($str, $i, 1) !== false) {

    array_pop($a);

    ($c == 1) and array_pop($a);

    $re = implode('', $a);

    $dot and $re .= '...';

    }

    return $re;

    }

    相关标签:php

    本文原创发布php中文网,转载请注明出处,感谢您的尊重!

    展开全文
  • 像上面这样(截取贴吧),当字符长度超过固定像素宽度时,截取像素宽度范围内的字符串,并在字符串后加省略号。mb_strlen函数只能获取字符数,而英文和中文一个字符所占宽度不一样,不能根据字符数来确定,不...

    bVluUK

    像上面这样(截取贴吧的),当字符长度超过固定的像素宽度时,截取像素宽度范围内的字符串,并在字符串后加省略号。mb_strlen函数只能获取字符数,而英文和中文一个字符所占的宽度不一样,不能根据字符数来确定,不知道该怎么实现?

    那个可以通过 CSS 来控制的… http://jsfiddle.net/sc7uk5bw/

    //截取字符串

    function msubstr($str, $start=0, $length, $charset="utf-8", $suffix=true){

    if(function_exists("mb_substr")){

    if($suffix){

    return mb_substr($str, $start, $length, $charset);

    }else{

    return mb_substr($str, $start, $length, $charset);

    }

    }elseif(function_exists('iconv_substr')) {

    if($suffix){

    return iconv_substr($str,$start,$length,$charset);

    }else{

    return iconv_substr($str,$start,$length,$charset);

    }

    }

    $re['utf-8']   = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";

    $re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";

    $re['gbk']    = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";

    $re['big5']   = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";

    preg_match_all($re[$charset], $str, $match);

    $slice = join("",array_slice($match[0], $start, $length));

    if($suffix){

    return $slice;

    }else{

    return $slice;

    }

    }

    给一个我平时用来截取字符串的方法吧,支持中英文

    php

    // 截取字符串

    public static function mix_substr($str, $len = 12, $dot = true) {

    $i = 0;

    $l = 0;

    $c = 0;

    $a = array();

    while ($l < $len) {

    $t = substr($str, $i, 1);

    if (ord($t) >= 224) {

    $c = 3;

    $t = substr($str, $i, $c);

    $l += 2;

    } elseif (ord($t) >= 192) {

    $c = 2;

    $t = substr($str, $i, $c);

    $l += 2;

    } else {

    $c = 1;

    $l++;

    }

    // $t = substr($str, $i, $c);

    $i += $c;

    if ($l > $len) break;

    $a[] = $t;

    }

    $re = implode('', $a);

    if (substr($str, $i, 1) !== false) {

    array_pop($a);

    ($c == 1) and array_pop($a);

    $re = implode('', $a);

    $dot and $re .= '...';

    }

    return $re;

    }

    展开全文
  • 怎样在创建TreeView时为每一个节点data属性赋予一个长字符串值(长度确定,几十个字符或者上万个字符),在单击每个节点时候再将每个节点data值取出来给edit/memo控件 继续阅读《怎样在创建TreeView时为每一...

    怎样在创建TreeView时为每一个节点的data属性赋予一个长字符串值(长度不确定,几十个字符或者上万个字符),在单击每个节点的时候再将每个节点的data值取出来给edit/memo控件

    继续阅读《怎样在创建TreeView时为每一个节点的data属性赋予一个长字符串值(长度不确定,几十个字符或者上万个字符),在单击节点的时候再将每个节》的全文内容...

    转载于:https://www.cnblogs.com/delphi2007/archive/2009/06/10/1500398.html

    展开全文
  • Math.random()趣味学习

    2018-04-10 21:10:20
    这个random不太冷 做一道简单java练习:要求是输入10个随机字符串(0-9,A-Z,a-z),它们彼此不能够重复....那么怎样确定字符串集合中包含当前产生字符串呢?如果使用ArrayList容器,那么就可以使用...

    这个random不太冷

    做一道简单的java练习:要求是输入10个随机字符串(0-9,A-Z,a-z),它们彼此不能够重复.对于每一个随机字符串,它的长度是随机的(例如在1-10当中选取).

    0.解题思路

    10个字符串,使用遍历就ok了.而对于每一个随机长度随机字符的字符串,需要使用内层循环来完成.那么怎样确定字符串集合中包含当前产生的字符串呢?如果使用ArrayList容器,那么就可以使用contains方法来判断.

    1.代码Implemention

    // 创建10条随机字符串
    List<String> myList = new ArrayList<String>();
    for (int i = 0; i < 10; i++) {
        // 一个存储合法字符的字符串
        String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    
        // 产生随机长度,在1-10之间
        int randomLen = (int)(Math.random() * 10 + 1);
        StringBuilder curString = new StringBuilder();
        for (int j = 0; j < randomLen; j++) {
            curString.append(str.charAt((int)(Math.random()*62)));
        }
    
        // 如果结果集合中已经包含字符串,那么重新此次生成
        if (myList.contains(curString.toString())) {
            i--;
        } else {
            myList.add(curString.toString());
        }
    }
    
    System.out.println("-----------排序前--------------");
    for (String string : myList) {
        System.out.println(string);
    }
    
    myList.sort(null);
    System.out.println("-----------排序后--------------");
    for (String string : myList) {
        System.out.println(string);
    }

    输出结果:

    -----------排序前--------------
    2Rz7Aahn
    SOioo
    tQ
    3
    maht
    AnoMH6F6
    Vn2mQKsH
    RM0qyd1XzK
    c
    maiwqC
    -----------排序后--------------
    2Rz7Aahn
    3
    AnoMH6F6
    RM0qyd1XzK
    SOioo
    Vn2mQKsH
    c
    maht
    maiwqC
    tQ

    2.遇到的Problem

    上面显示的是最后的结果啦,当然一开始我的结果系这样滴:

    // Endless Loop

    咦,什么原因呢?于是来测试 i 的值

    0
    1
    2
    3
    4
    5
    6
    7
    8
    8
    8
    8
    ...

    莫名其妙…
    于是测试每次生成的随机字符

    ...
    aaaaaaaa
    aaa
    aaaaaa
    aaaa
    aaaaa
    aaaaaaaa
    a
    aaaaa
    aaaaaaa
    aaaaaaaa
    ...

    哎哟我天,怎么全是a呀,然后到了今天的第一个问题:
    我把这一行写错了:

    curString.append(str.charAt((int)Math.random()*62));

    而应该是:

    curString.append(str.charAt((int)(Math.random()*62)));

    两者有什么不同呢,原来,按照上面的写法,是先计算(int)Math.random(),结果是0,所以整个表达式结果永远返回的都是第0个元素
    于是,修改之后,得到了结果

    刨根问到底, 我在想,即便是刚刚那样写.那么也能够不断的产生结果最后跳出循环呐
    而且,排序后结果应该系介样:

    a
    aa
    aaa
    ...
    aaaaaaaaaa

    为什么会掉进死循环呢?
    到底是为什么呢
    为什么呢
    为啥呢
    我草率地得出结论:应该是随机过程有问题,总是产生固定的几个数,所以一直循环

    当然,这仅仅代表我的愿景罢了
    真实情况系: 我错了…
    纵里寻他千百度,回头一看,原来randomLen赋值那一行,我是介么写滴:

    // 创建10条随机字符串
    List<String> myList = new ArrayList<String>();
    for (int i = 0; i < 10; i++) {
        // 一个存储合法字符的字符串
        String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    
        // 产生随机长度,在1-10之间
        int randomLen = (int)(Math.random() * 9 + 1);
        // 本来应该的行
        // int randomLen = (int)(Math.random() * 10 + 1);
        ...
    }
    ...

    由于Math.random()产生的是[0,1)的结果,因而我最开始的产生结果落在了[1,10)区间(取整后1-9),而修改后的产生结果就落在了[1,11)区间(取整后1-10)
    嗯,果然,这次正常输出我预想的结果,鸡冻地再贴一遍!

    a
    aa
    ...
    aaaaaaaaaa

    3.一个Advice

    当然啦,我为了产生一个简单的随机结果,费了这个周折.有没有什么办法让我不考虑这些问题呢,对于 curString.append(str.charAt((int)(Math.random()*62)))的情况,我很容易漏掉括号呀.
    福音来了,通过google搜素,找到了解决办法: 使用Random类
    代码如下:

    // 创建10条随机字符串
    List<String> myList = new ArrayList<String>();
    Random random = new Random();
    for (int i = 0; i < 10; i++) {
        // 一个存储合法字符的字符串
        String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    
        // 产生随机长度,在1-10之间
        int randomLen = random.nextInt(10);
        StringBuilder curString = new StringBuilder();
        for (int j = 0; j < randomLen; j++) {
            curString.append(str.charAt(random.nextInt(62)));
        }
        ...
    }
    ...

    相对于之前,就不会出现之前的错误啦,哈哈

    4.小Summary

    在使用Math.random()方法时, 不要忘了加括号!
    当然,使用Random类的话,就可以无忧啦

    引用

    1.java生成随机字符串(密码)包含字母,数字,a-z,A-Z,0-9

    展开全文
  • 在很多项目里面都会有一个登录页面,而登录页面一般都会有一个验证码来...数字和密码混合随机数出来了之后,然后再写产生非负随机正数代码,再根据当前随机数来确定字符串。 (下面截图) 根据当前随机数来确定...
  • 贪心算法练习

    2018-03-09 21:10:38
    把这些策略都累积成贪心经验即可给定一个字符串类型数组strs,找到一种拼接方式,使得把所有字 符串拼起来之后形成的字符串具有最低字典序。解释:字符串字典序。ca &gt; ac 当字符串长度相等时 。 从左向...
  • 你必须知道495个C语言问题

    千次下载 热门讨论 2015-05-08 11:09:25
    2.15 如何确定域在结构中字节偏移量? 2.16 怎样在运行时用名字访问结构中域? 2.17 C语言中有和Pascalwith等价语句吗? 2.18 既然数组名可以用作数组基地址,为什么对结构不能这样? 2.19 程序...
  • 《你必须知道495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    书中列出了C用户经常问400多个经典问题,涵盖了初始化、数组、指针、字符串、内存分配、库函数、C预处理器等各个方面主题,并分别给出了解答,而且结合代码示例阐明要点。 《你必须知道495个C语言问题》结构...
  • 2.15 如何确定域在结构中字节偏移量? 28 2.16 怎样在运行时用名字访问结构中域? 29 2.17 C语言中有和Pascalwith等价语句吗? 29 2.18 既然数组名可以用作数组基地址,为什么对结构不能这样? 29...
  • 题面 题解 ...循环长度已经确定怎样保证它就是最小的呢(只有区间长度最小,才能划分出更多),如果这个长度不是最小,还可以更小,那么这个子字符串的ne[i]就会相应的增大,就互相矛盾 我们
  • 给出一个长为NNN的序列AAA,最小化能构造NNN个字符串满足严格字典序升序且第iii个字符串的长度为AiA_iAi​的字符集大小。 N≤2∗105N≤2*10^5N≤2∗105 Ai≤1∗109A_i≤1*10^9Ai​≤1∗109 题解 最早想的是从左往...
  • 书中列出了C用户经常问400多个经典问题,涵盖了初始化、数组、指针、字符串、内存分配、库函数、C预处理器等各个方面主题,并分别给出了解答,而且结合代码示例阐明要点。 本书结构清晰,讲解透彻,是各高校相关...
  • 书中列出了C用户经常问400多个经典问题,涵盖了初始化、数组、指针、字符串、内存分配、库函数、C预处理器等各个方面主题,并分别给出了解答,而且结合代码示例阐明要点。  本书结构清晰,讲解透彻,是各高校...
  • 2.15 如何确定域在结构中字节偏移量?  2.16 怎样在运行时用名字访问结构中域?  2.17 C语言中有和Pascalwith等价语句吗?  2.18 既然数组名可以用作数组基地址,为什么对结构不能这样?  2.19 ...
  •  2.15 如何确定域在结构中字节偏移量? 2.16 怎样在运行时用名字访问结构中域? 2.17 C语言中有和Pascalwith等价语句吗? 2.18 既然数组名可以用作数组基地址,为什么对结构不能这样? 2.19 ...
  • 你必须知道495个C语言问题(PDF)

    热门讨论 2009-09-15 10:25:47
    回指向字符的指针函数指针数组? . . . . . . . . . . . . . . 3 1.8 函数只定义了一次, 调用了一次, 但编译器提示非法重定义了。. . 4 1.9 main() 正确定义是什么? void main() 正确吗? . . . . . . . . ...
  • VB技巧10页

    2008-03-16 18:44:38
    Ins 快速查找属性 在字符串中使用双引号 混合字符串的长度 取得应用所在的目录 快速交换整数 自动出现动画进度和确认的文件操作 快速建立目录 开启文件属性窗口 使用WIN的选择目录对话框...
  • 7.25 怎样确定一块已分配内存大小? 7.26 free()函数是怎样知道要释放内存块大小? 7.27 可以对void指针进行算术运算吗? 7.28 怎样打印一个地址? 第8章 函数 8.1 什么时候说明函数? 8.2 ...
  • C语言编程要点

    2017-09-18 00:10:37
    7.25. 怎样确定一块已分配内存大小? 126 7.26. free()函数是怎样知道要释放内存块大小? 126 7.27. 可以对void指针进行算术运算吗? 127 7.28. 怎样打印一个地址? 127 第8章 函 数 127 8.1. 什么时候说明...
  • 注意不同是被单引号引出的字符串是以字面定义,而双引号引出的字符串可以被扩展。反斜杠(\)可以被用来分割某些特殊字符。举例如下: $first = 'Hello'; $second = "World"; $full1 = "$first $second"; # ...
  • 正则表达式

    2014-12-03 14:51:39
    第二个字符 "$" 是一个特殊字符,它所匹配的是字符串的结尾.所以正则表达式 /s$/ 匹配的就是以字母 "s" 结尾 的字符串. 1.直接量字符 我们已经发现了,在正则表达式中所有的字母字符和数字都是按照字面意思与...
  • previous up contents next C 语言常见问题集 原著:Steve Summit 翻译:朱群英, 孙 云 修订版 0.9.4, 2005年6月23日... o 8.6 我有个函数, 本该返回一个字符串, 但当它返回调用者时候, 返回串却是垃圾信息。 ...
  • JAVA 正则表达式

    热门讨论 2010-01-15 11:16:37
    众所周知,在程序开发中,难免会遇到需要匹配、查找、替换、判断字符串的情况发生,而这些情况有时 又比较复杂,如果用纯编码方式解决,往往会浪费程序员的时间及精力。因此,学习及使用正则表达式, 便成了解决这...
  • 222 使用sizeof操作来判断字符串的有效长度 223 使用sizeof判断数组中字符串的数量 224 访问字符串中的单个字符 225 动态分配字符串 226 示例:反转一个字符串中的字符 第二十三章 函数和变量 227 理解函数 228 理解...
  • 222 使用sizeof操作来判断字符串的有效长度 223 使用sizeof判断数组中字符串的数量 224 访问字符串中的单个字符 225 动态分配字符串 226 示例:反转一个字符串中的字符 第二十三章 函数和变量 227 理解函数 228 理解...
  • 222 使用sizeof操作来判断字符串的有效长度 223 使用sizeof判断数组中字符串的数量 224 访问字符串中的单个字符 225 动态分配字符串 226 示例:反转一个字符串中的字符 第二十三章 函数和变量 227 理解函数 228 理解...

空空如也

空空如也

1 2 3 4
收藏数 73
精华内容 29
关键字:

怎样确定字符串的长度