精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

.NET中刪除空白字符串的10大方法

開發 后端
我們有無數方法可用于刪除字符串中的所有空白。大部分都能夠在絕大多數的用例中很好工作,但在某些對時間敏感的應用程序中,是否采用最快的方法可能就會造成天壤之別。

我們有無數方法可用于刪除字符串中的所有空白,但是哪個更快呢?

介紹

我們有無數方法可用于刪除字符串中的所有空白。大部分都能夠在絕大多數的用例中很好工作,但在某些對時間敏感的應用程序中,是否采用最快的方法可能就會造成天壤之別。

如果你問空白是什么,那說起來還真是有些亂。許多人認為空白就是SPACE 字符(UnicodeU+0020,ASCII 32,HTML ),但它實際上還包括使得版式水平和垂直出現空格的所有字符。事實上,這是一整類定義為Unicode字符數據庫的字符。

本文所說的空白,不但指的是它的正確定義,同時也包括string.Replace(” “, “”)方法。

這里的基準方法,將刪除所有頭尾和中間的空白。這就是文章標題中“所有空白”的含義。

[[145166]]

背景

這篇文章一開始是出于我的好奇心。事實上,我并不需要用最快的算法來刪除字符串中的空白。

檢查空白字符

檢查空白字符很簡單。所有你需要的代碼就是:

 

  1. char wp = ' '
  2. char a = 'a'
  3. Assert.True(char.IsWhiteSpace(wp)); 
  4. Assert.False(char.IsWhiteSpace(a)); 
  5.  
  6. 但是,當我實現手動優化刪除方法時,我意識到這并不像預期得那么好。一些源代碼在微軟的參考源代碼庫的char.cs挖掘找到: 
  7.  
  8. public static bool IsWhiteSpace(char c) { 
  9.     if (IsLatin1(c)) { 
  10.         return (IsWhiteSpaceLatin1(c)); 
  11.     } 
  12.     return CharUnicodeInfo.IsWhiteSpace(c); 
  13.  
  14. 然后CharUnicodeInfo.IsWhiteSpace成了: 
  15.  
  16. internal static bool IsWhiteSpace(char c) 
  17.     UnicodeCategory uc = GetUnicodeCategory(c); 
  18.     // In Unicode 3.0, U+2028 is the only character which is under the category "LineSeparator". 
  19.     // And U+2029 is th eonly character which is under the category "ParagraphSeparator". 
  20.     switch (uc) { 
  21.         case (UnicodeCategory.SpaceSeparator): 
  22.         case (UnicodeCategory.LineSeparator): 
  23.         case (UnicodeCategory.ParagraphSeparator): 
  24.             return (true); 
  25.     } 
  26.  
  27.     return (false); 
  28.  
  29. GetUnicodeCategory()方法調用InternalGetUnicodeCategory()方法,而且實際上相當快,但現在我們依次已經有了4個方法調用!以下這段代碼是由一位評論者提供的,可用于快速實現定制版本和JIT默認內聯: 
  30.  
  31. // whitespace detection method: very fast, a lot faster than Char.IsWhiteSpace 
  32. [MethodImpl(MethodImplOptions.AggressiveInlining)] // if it's not inlined then it will be slow!!! 
  33. public static bool isWhiteSpace(char ch) { 
  34.     // this is surprisingly faster than the equivalent if statement 
  35.     switch (ch) { 
  36.         case '\u0009'case '\u000A'case '\u000B'case '\u000C'case '\u000D'
  37.         case '\u0020'case '\u0085'case '\u00A0'case '\u1680'case '\u2000'
  38.         case '\u2001'case '\u2002'case '\u2003'case '\u2004'case '\u2005'
  39.         case '\u2006'case '\u2007'case '\u2008'case '\u2009'case '\u200A'
  40.         case '\u2028'case '\u2029'case '\u202F'case '\u205F'case '\u3000'
  41.             return true
  42.         default
  43.             return false
  44.     } 

刪除字符串的不同方法

我用各種不同的方法來實現刪除字符串中的所有空白。

分離合并法

這是我一直在用的一個非常簡單的方法。根據空格字符分離字符串,但不包括空項,然后將產生的碎片重新合并到一起。這方法聽上去有點傻乎乎的,而事實上,乍一看,很像是一個非常浪費的解決方式:

 

  1. public static string TrimAllWithSplitAndJoin(string str) { 
  2.     return string.Concat(str.Split(default(string[]), StringSplitOptions.RemoveEmptyEntries)); 
  3.  
  4. LINQ 
  5.  
  6. 這是優雅地聲明式地實現這個過程的方法: 
  7.  
  8. public static string TrimAllWithLinq(string str) { 
  9.     return new string(str.Where(c => !isWhiteSpace(c)).ToArray()); 

正則表達式

正則表達式是非常強大的力量,任何程序員都應該意識到這一點。

 

  1. static Regex whitespace = new Regex(@"\s+", RegexOptions.Compiled); 
  2.  
  3. public static string TrimAllWithRegex(string str) { 
  4.     return whitespace.Replace(str, ""); 

字符數組原地轉換法

該方法將輸入的字符串轉換成字符數組,然后原地掃描字符串去除空白字符(不創建中間緩沖區或字符串)。***,經過“刪減”的數組會產生新的字符串。

 

  1. public static string TrimAllWithInplaceCharArray(string str) { 
  2.     var len = str.Length; 
  3.     var src = str.ToCharArray(); 
  4.     int dstIdx = 0
  5.     for (int i = 0; i < len; i++) { 
  6.         var ch = src[i]; 
  7.         if (!isWhiteSpace(ch)) 
  8.             src[dstIdx++] = ch; 
  9.     } 
  10.     return new string(src, 0, dstIdx); 

字符數組復制法

這種方法類似于字符數組原地轉換法,但它使用Array.Copy復制連續非空白“字符串”的同時跳過空格。***,它將創建一個適當尺寸的字符數組,并用相同的方式返回一個新的字符串。

public static string TrimAllWithCharArrayCopy(string str) {
    var len = str.Length;
    var src = str.ToCharArray();
    int srcIdx = 0, dstIdx = 0, count = 0;
    for (int i = 0; i < len; i++) {
        if (isWhiteSpace(src[i])) {
            count = i - srcIdx;
            Array.Copy(src, srcIdx, src, dstIdx, count);
            srcIdx += count + 1;
            dstIdx += count;
            len--;
        }
    }
    if (dstIdx < len)
        Array.Copy(src, srcIdx, src, dstIdx, len - dstIdx);
    return new string(src, 0, len);
}

循環交換法

用代碼實現循環,并使用StringBuilder類,通過依靠StringBuilder的內在優化來創建新的字符串。為了避免任何其他因素對本實施產生干擾,不調用其他的方法,并且通過緩存到本地變量避免訪問類成員。***通過設置StringBuilder.Length將緩沖區調整到合適大小。

// Code suggested by http://www.codeproject.com/Members/TheBasketcaseSoftware
public static string TrimAllWithLexerLoop(string s) {
    int length = s.Length;
    var buffer = new StringBuilder(s);
    var dstIdx = 0;
    for (int index = 0; index < s.Length; index++) {
        char ch = s[index];
        switch (ch) {
            case '\u0020': case '\u00A0': case '\u1680': case '\u2000': case '\u2001':
            case '\u2002': case '\u2003': case '\u2004': case '\u2005': case '\u2006':
            case '\u2007': case '\u2008': case '\u2009': case '\u200A': case '\u202F':
            case '\u205F': case '\u3000': case '\u2028': case '\u2029': case '\u0009':
            case '\u000A': case '\u000B': case '\u000C': case '\u000D': case '\u0085':
                length--;
                continue;
            default:
                break;
        }
        buffer[dstIdx++] = ch;
    }
    buffer.Length = length;
    return buffer.ToString();;
}

循環字符法

這種方法幾乎和前面的循環交換法相同,不過它采用if語句來調用isWhiteSpace(),而不是亂七八糟的switch伎倆 :)。

public static string TrimAllWithLexerLoopCharIsWhitespce(string s) {
    int length = s.Length;
    var buffer = new StringBuilder(s);
    var dstIdx = 0;
    for (int index = 0; index < s.Length; index++) {
        char currentchar = s[index];
        if (isWhiteSpace(currentchar))
            length--;
        else
            buffer[dstIdx++] = currentchar;
    }
    buffer.Length = length;
    return buffer.ToString();;
}

原地改變字符串法(不安全)

這種方法使用不安全的字符指針和指針運算來原地改變字符串。我不推薦這個方法,因為它打破了.NET框架在生產中的基本約定:字符串是不可變的。

public static unsafe string TrimAllWithStringInplace(string str) {
    fixed (char* pfixed = str) {
        char* dst = pfixed;
        for (char* p = pfixed; *p != 0; p++)
            if (!isWhiteSpace(*p))
                *dst++ = *p;

        /*// reset the string size
            * ONLY IT DIDN'T WORK! A GARBAGE COLLECTION ACCESS VIOLATION OCCURRED AFTER USING IT
            * SO I HAD TO RESORT TO RETURN A NEW STRING INSTEAD, WITH ONLY THE PERTINENT BYTES
            * IT WOULD BE A LOT FASTER IF IT DID WORK THOUGH...
        Int32 len = (Int32)(dst - pfixed);
        Int32* pi = (Int32*)pfixed;
        pi[-1] = len;
        pfixed[len] = '\0';*/
        return new string(pfixed, 0, (int)(dst - pfixed));
    }
}

原地改變字符串法V2(不安全)

這種方法幾乎和前面那個相同,不過此處使用類似數組的指針訪問。我很好奇,不知道這兩種哪種存儲訪問會更快。

public static unsafe string TrimAllWithStringInplaceV2(string str) {
    var len = str.Length;
    fixed (char* pStr = str) {
        int dstIdx = 0;
        for (int i = 0; i < len; i++)
            if (!isWhiteSpace(pStr[i]))
                pStr[dstIdx++] = pStr[i];
        // since the unsafe string length reset didn't work we need to resort to this slower compromise
        return new string(pStr, 0, dstIdx);
    }
}

String.Replace(“”,“”)

這種實現方法很天真,由于它只替換空格字符,所以它不使用空白的正確定義,因此會遺漏很多其他的空格字符。雖然它應該算是本文中最快的方法,但功能不及其他。

但如果你只需要去掉真正的空格字符,那就很難用純.NET寫出勝過string.Replace的代碼。大多數字符串方法將回退到手動優化本地C ++代碼。而String.Replace本身將用comstring.cpp調用C ++方法:

FCIMPL3(Object*,
    COMString::ReplaceString,
    StringObject* thisRefUNSAFE,
    StringObject* oldValueUNSAFE,
    StringObject* newValueUNSAFE)

下面是基準測試套件方法:

public static string TrimAllWithStringReplace(string str) {
    // This method is NOT functionaly equivalent to the others as it will only trim "spaces"
    // Whitespace comprises lots of other characters
    return str.Replace(" ", "");
}

許可證

這篇文章,以及任何相關的源代碼和文件,依據The Code Project Open License (CPOL)的許可。

 

 

 

譯文鏈接:http://www.codeceo.com/article/donet-remove-whitespace-string.html
英文原文:Fastest method to remove all whitespace from Strings in .NET

 

責任編輯:王雪燕 來源: 碼農網
相關推薦

2015-10-29 11:55:30

.NET空白字符串方法

2020-09-07 13:08:36

String空白字符方式

2010-11-25 15:59:33

字符串.NET

2009-07-24 13:01:44

ASP.NET頁面跳轉

2025-05-21 04:00:00

JavaScript前端

2020-09-03 10:13:49

JavaScript字符串pad

2009-07-06 13:18:35

Servlet方法

2009-07-28 10:36:37

ASP.NET讀取Ex

2010-05-07 08:59:50

ASP.NET

2013-07-15 11:00:18

提升WI-FI信號強度

2010-06-21 09:48:43

2010-01-13 15:12:04

VB.NET字符串合并

2024-04-01 08:41:39

字符串.NET

2009-07-24 10:06:33

數據庫字符串ASP.NET

2020-05-14 10:24:41

YAML配置字符串

2009-11-26 18:28:07

PHP函數trim()

2020-10-16 18:35:53

JavaScript字符串正則表達式

2021-05-18 09:08:18

字符串子串對象

2024-06-11 07:34:58

C#字符串性能

2019-12-10 10:31:30

javascriptWeb前端開發
點贊
收藏

51CTO技術棧公眾號

激情视频在线观看| 91福利免费视频| 神马影视一区二区| 欧美日韩国产系列| www.欧美黄色| 免费在线观看污视频| 蜜桃精品视频在线观看| 久久久久久久久久婷婷| 日本激情小视频| 视频一区国产| 欧美亚洲高清一区二区三区不卡| 性生活免费观看视频| 久草福利在线视频| 国产91精品久久久久久久网曝门| 国产成人久久久| 欧美黄色免费看| av中文一区| 亚洲电影免费观看高清| 涩涩网站在线看| 超碰一区二区| 亚洲成人资源在线| 中文字幕一区二区三区乱码| 偷拍自拍在线视频| 丰满白嫩尤物一区二区| 国产中文欧美精品| 波多野结衣人妻| 亚洲免费影视| 久久久久久久久久久免费| 网站永久看片免费| 国产成人手机高清在线观看网站| 欧美哺乳videos| 亚洲一区二区福利视频| 电影一区电影二区| 日韩欧美在线视频| 国产午夜大地久久| heyzo中文字幕在线| 亚洲欧美国产高清| 在线免费观看成人网| 国产三级在线观看| 久久先锋影音av| 九色91视频| 日本免费网站在线观看| 成人av网在线| 国产精品日本一区二区| 成人午夜视频一区二区播放| 国产一区二区三区免费| 91在线精品播放| 国产精品国产精品国产专区| 免费亚洲电影在线| 国产精品入口福利| 在线观看不卡的av| 久久国产生活片100| 91精品国产自产在线观看永久| 久久影视中文字幕| 日本强好片久久久久久aaa| 国产成人精品亚洲精品| 久久久精品毛片| 免费在线观看不卡| 国产日韩在线播放| 国产女人18毛片水真多| 国产一区美女在线| 99在线视频播放| 欧美一级特黄aaaaaa| 波多野结衣中文字幕一区二区三区| 国产精品久久7| 少妇荡乳情欲办公室456视频| 不卡欧美aaaaa| 久久久人人爽| 国产天堂素人系列在线视频| 中文字幕精品—区二区四季| 中文字幕乱码一区二区三区| 污的网站在线观看| 午夜私人影院久久久久| 日本www在线视频| 成人四虎影院| 日韩一区二区三区电影在线观看 | av男人的天堂在线观看| 富二代精品短视频| 五月天激情视频在线观看| 欧美爱爱视频| 精品日韩99亚洲| 免费污网站在线观看| 先锋资源久久| 97精品久久久中文字幕免费| 中文字幕人成人乱码亚洲电影| 精品中文字幕一区二区| 国产精品日韩欧美一区二区三区| 美女做暖暖视频免费在线观看全部网址91 | 亚洲欧美日本日韩| 国产精品夜色7777狼人| 亚洲精品国偷拍自产在线观看蜜桃 | 中文字幕一区二区av| 韩国一区二区电影| 影音先锋黄色网址| 9色porny自拍视频一区二区| 性欧美videosex高清少妇| 亚洲资源一区| 色八戒一区二区三区| 亚洲高清av一区二区三区| 风间由美性色一区二区三区四区| 夜夜嗨av色一区二区不卡| 久久久久久av无码免费网站| 视频一区二区中文字幕| 亚洲综合一区二区不卡| 九色视频网站在线观看| 一区二区三区四区不卡在线| 欧美aⅴ在线观看| 日本高清久久| 色一情一乱一区二区| 国产香蕉视频在线| 国产一区在线观看麻豆| 日韩av在线一区二区三区| eeuss鲁一区二区三区| 欧美色综合天天久久综合精品| 秘密基地免费观看完整版中文 | 麻豆成人在线看| 亚洲成人av网址| av电影天堂一区二区在线| 在线观看污视频| 日日狠狠久久| 国产亚洲精品久久| 在线能看的av| 国产suv精品一区二区883| 尤物一区二区三区| 日本一区二区三区视频在线| 日韩av在线最新| 久久久精品99| 国产成人午夜片在线观看高清观看| 亚洲高清在线播放| 性高爱久久久久久久久| 日韩精品视频观看| 日本一区二区三区免费视频| 国产aⅴ综合色| 成年人视频大全| 日韩一区二区三区精品| 久久深夜福利免费观看| 亚洲图片欧美在线| 中文字幕欧美区| 在线观看av日韩| 国产一区二区观看| 国产成人精品国内自产拍免费看| 日韩私人影院| 欧美午夜影院在线视频| 成人h动漫精品一区| 亚洲精品孕妇| 精品无人区一区二区三区竹菊| caoporn视频在线| 日韩欧美电影一区| 久久久久亚洲天堂| 成人白浆超碰人人人人| 乱人伦xxxx国语对白| 日韩成人av在线资源| 国产91精品视频在线观看| 亚洲 欧美 激情 另类| 黑人巨大精品欧美一区二区一视频| 天天插天天射天天干| 香蕉成人久久| 亚洲第一在线综合在线| 亚洲精品成a人ⅴ香蕉片| 久久精品久久久久久| av中文字幕观看| 午夜一区二区三区视频| 欧美深性狂猛ⅹxxx深喉| 老司机免费视频久久| 先锋影音日韩| 91麻豆精品激情在线观看最新 | 国产黄色免费观看| 国产视频一区在线播放| 玖玖爱视频在线| 午夜精品影院| 蜜桃av噜噜一区二区三区| 精品亚洲美女网站| 美女性感视频久久久 | 中文国产成人精品久久一| 中文字幕视频一区二区| 亚洲欧美韩国综合色| 中文字幕精品视频在线| 日韩国产欧美在线观看| 视频一区二区视频| 久久精品亚洲成在人线av网址| 欧美专区在线视频| 91青青在线视频| 欧美xxx久久| 日韩精选在线观看| 亚洲一区二区五区| 亚洲国产日韩一区无码精品久久久| 免费一级片91| 欧美日韩福利在线| 成人激情免费视频| 国产精品加勒比| 成人免费毛片嘿嘿连载视频…| 美女视频黄免费的亚洲男人天堂| 婷婷色在线观看| 欧美精品黑人性xxxx| 日本熟妇色xxxxx日本免费看| 国产欧美久久久精品影院| 中文字幕久久久久久久| 日本亚洲视频在线| 国产美女主播在线播放| 久久婷婷蜜乳一本欲蜜臀| 国产一区二区三区高清视频| 欧美在线se| 91超碰caoporn97人人| 黄色动漫在线| 亚洲性日韩精品一区二区| 亚洲精品中文字幕成人片| 欧美视频在线观看一区| 99视频在线看| 亚洲精品中文在线观看| 九一在线免费观看| 91网站在线观看视频| 丰满人妻一区二区三区大胸| 男女视频一区二区| 欧美日韩一区二区在线免费观看| 欧美日韩精品免费观看视频完整| 神马影院午夜我不卡| 精品三级av在线导航| 69堂成人精品视频免费| 国产成人久久精品麻豆二区| 欧美专区中文字幕| 黄视频免费在线看| 久久久久久国产免费| 国内精品久久久久久野外| 伊人精品在线观看| 欧洲免费在线视频| 亚洲第一区第一页| 亚洲黄色在线播放| 日韩欧美一区二区久久婷婷| 一级黄色片在线| 精品视频在线免费看| 中文字幕免费高清网站| 日韩欧美在线看| 69国产精品视频免费观看| 精品福利在线视频| 日本一区二区三区四区五区 | 国产美女主播在线播放 | 日本va中文字幕| 久久久久久久欧美精品| 欧美a在线视频| 性欧美xxxx大乳国产app| 日本国产在线播放| 午夜亚洲精品| 成人精品视频一区二区| 久久美女性网| 国产 porn| 麻豆一区二区三| 亚洲天堂国产视频| 久久国产夜色精品鲁鲁99| 成人日韩在线视频| 国产一区二区视频在线| 初高中福利视频网站| 国产91综合一区在线观看| 无码国产精品一区二区免费式直播| 国产成人综合网站| 69亚洲乱人伦| 26uuu色噜噜精品一区| 无码 人妻 在线 视频| 中文字幕欧美三区| 亚洲色偷偷综合亚洲av伊人| 一区二区三区四区视频精品免费| 久久久久亚洲av片无码下载蜜桃| 亚洲国产视频a| 日本一区二区三区精品| 91黄色激情网站| 一本一道精品欧美中文字幕| 欧美美女直播网站| 亚洲国产成人在线观看| 亚洲国产成人在线视频| 高清福利在线观看| 久久精品国产成人| av人人综合网| 日韩免费中文字幕| www一区二区三区| 风间由美久久久| 久久99国内| 正在播放一区| 日韩一级网站| 亚洲免费av一区二区三区| 国产在线不卡一区| zjzjzjzjzj亚洲女人| 久久久99精品免费观看不卡| 婷婷社区五月天| 欧美日韩亚洲视频| 国产伦精品一区二区三区视频痴汉 | 97av在线视频免费播放| 欧美成人免费全部网站| 国产精品国产精品国产专区蜜臀ah| 综合亚洲自拍| 亚洲国产精品影视| 亚洲综合三区| japan高清日本乱xxxxx| 久久人人爽爽爽人久久久| 精品人妻伦九区久久aaa片| 欧美日韩国产精品一区二区三区四区 | 中日韩高清电影网| 日本亚洲欧洲色α| 91精品啪在线观看国产爱臀 | 成年网站在线| 欧美风情在线观看| av免费在线一区| 国产一级二级三级精品| 亚洲h色精品| 男人女人黄一级| 9人人澡人人爽人人精品| 91嫩草丨国产丨精品| 色综合久久精品| 欧美熟妇交换久久久久久分类 | 2019中文字幕在线电影免费 | 亚洲少妇第一页| av电影天堂一区二区在线观看| 91人妻一区二区三区蜜臀| 无码av免费一区二区三区试看| 7777久久亚洲中文字幕| 亚洲一级免费视频| 在线观看爽视频| 国产精品免费看一区二区三区| 久久精品av| 中文字幕第36页| 久久久美女毛片| www.日本精品| 精品电影一区二区三区| caopo在线| 91久久久久久久一区二区| 成人3d动漫在线观看| 国产xxxxx在线观看| av男人天堂一区| 韩国av免费观看| 亚洲国产精品久久久久秋霞不卡 | 一区二区三区中文免费| 91精品在线视频观看| 一本色道久久综合狠狠躁篇怎么玩| 欧洲一区精品| 狠狠色噜噜狠狠狠狠色吗综合| 国产精品成人一区二区网站软件| 日韩成人av免费| 综合中文字幕亚洲| 国产免费黄色网址| 久久亚洲精品一区| 成人午夜888| 日本一道在线观看| 国产精品一区二区你懂的| 午夜69成人做爰视频| 欧美一级淫片007| 午夜av在线播放| 国产精品yjizz| 国产亚洲激情| jizz中文字幕| 欧美日韩精品一区二区三区四区 | 韩日视频在线| 国产精品久久久久99| 日韩不卡一区| 久久综合在线观看| 亚洲一区二区三区四区在线观看| 性欧美8khd高清极品| 韩国v欧美v日本v亚洲| 亚洲v天堂v手机在线| 色综合天天色综合| 最新不卡av在线| 亚洲国产精品欧美久久| 欧美亚洲日本网站| 欧美精选视频在线观看| 少妇网站在线观看| 亚洲摸摸操操av| 神马午夜一区二区| 国产精品27p| 亚洲国产精品日韩专区av有中文| 中文字幕一二三区| 色综合网色综合| 日本在线免费中文字幕| 国产a一区二区| 久久高清国产| 一起操在线播放| 亚洲国产精品久久久久秋霞蜜臀 | 国产色在线观看| 国产视频一区二区三区四区| 亚洲一区久久| 欧美爱爱免费视频| 亚洲国产高清福利视频| 黄色精品视频| 成人一级生活片| 国产午夜亚洲精品午夜鲁丝片| 国产白浆在线观看| 日韩免费在线播放| 亚洲欧美亚洲| 人妻aⅴ无码一区二区三区 | 又黄又爽又色的视频| 福利视频第一区| 91香蕉在线观看| 日本高清一区| 丁香婷婷综合激情五月色| 波多野结衣午夜| 久久久久久尹人网香蕉| 成人午夜av| 粉嫩av懂色av蜜臀av分享| 制服丝袜一区二区三区| 六月婷婷综合| 日韩伦理在线免费观看| **网站欧美大片在线观看| 三级在线播放| 福利视频一区二区三区|