精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

我要色综合中文字幕| 国产理论电影在线观看| 欧美精品综合| 日韩电视剧免费观看网站| 粉嫩虎白女毛片人体| 97最新国自产拍视频在线完整在线看| 麻豆91在线看| 久久久久久久久久久亚洲| 亚洲最大免费视频| 欧美亚洲人成在线| 亚洲成人一区二区在线观看| 日本免费高清一区| 亚洲精品第五页| 日韩国产成人精品| 欧美激情在线狂野欧美精品| 公肉吊粗大爽色翁浪妇视频| 亚洲精品黑牛一区二区三区| 色老汉一区二区三区| 超碰97在线看| 福利小视频在线观看| 国产成人欧美日韩在线电影| 国产精品福利在线观看| 精品无码人妻一区二区三区| 精品久久成人| 日韩电视剧在线观看免费网站| 亚洲美女性囗交| 亚洲精品福利电影| 亚洲小说欧美激情另类| 正在播放精油久久| 九色视频在线观看免费播放| 成人免费福利片| 91沈先生播放一区二区| 国产精品sm调教免费专区| 亚洲夜间福利| 精品综合久久久久久97| 国产日韩精品中文字无码| 女人抽搐喷水高潮国产精品| 欧美一区二区三区啪啪| 三上悠亚在线一区二区| 国产高清不卡| 欧美性极品xxxx娇小| 久久精品无码中文字幕| 中文在线观看免费| 亚洲品质自拍视频| 中文字幕日韩一区二区三区| av在线资源站| 欧美国产精品劲爆| 区一区二区三区中文字幕| 天天干在线观看| 成人免费观看视频| 精品国产乱码久久久久久郑州公司| 99国产在线播放| 久久99精品网久久| 国产欧美va欧美va香蕉在| 国产精品露脸视频| 久久国产欧美日韩精品| 国产精品午夜国产小视频| 波多野结衣黄色| 日韩福利电影在线观看| 国产精品久久9| 中日韩在线观看视频| 秋霞国产午夜精品免费视频| 国产精品美女999| 欧美高清69hd| 精品一区二区国语对白| 91香蕉国产在线观看| av免费观看在线| 高清久久久久久| 精品久久久久久中文字幕动漫| 国模无码一区二区三区| 99久久精品久久久久久清纯| 久久综合一区二区三区| av成人手机在线| 亚洲日本丝袜连裤袜办公室| 欧美xxxx吸乳| aa级大片免费在线观看| 午夜精品久久久久久久久久久| 日本中文字幕网址| 超薄肉色丝袜脚交一区二区| 欧美日韩性生活| 欧美性受xxxx黒人xyx性爽| 日韩精品免费视频一区二区三区| 精品国产精品网麻豆系列| 国产白嫩美女无套久久| 第一社区sis001原创亚洲| 久久久www成人免费精品张筱雨| 欧美日韩在线观看成人| 99国产精品久久久久久久成人热| 国产精品999| 亚洲第九十九页| 久久一区二区三区四区| 在线无限看免费粉色视频| 欧美人体视频xxxxx| 欧美视频第一页| 日韩高清第一页| 91亚洲无吗| 国产一区二区三区直播精品电影| 国产探花在线免费观看| 中文亚洲字幕| 91精品在线一区| 日本一区高清| 亚洲精品老司机| 久久精品国产精品亚洲色婷婷| 免费日韩成人| 日韩精品免费在线视频观看| 在线观看黄网址| 国产精品永久| 成人免费观看网站| 91精彩视频在线观看| 性做久久久久久久久| 天天看片天天操| 老司机在线看片网av| 亚洲第一偷拍| 久久久久久一区二区三区| 最新在线中文字幕| 不卡一区二区三区四区| 一区高清视频| 少妇影院在线观看| 国产精品99一区二区三| 午夜精品三级视频福利| 91精品视频免费在线观看| 97久久精品人人做人人爽| 亚洲综合激情五月| 韩国精品主播一区二区在线观看 | 欧美日韩国产二区| 成人免费一级片| 91麻豆精东视频| 国产成人一二三区| 亚洲国产天堂| 自拍亚洲一区欧美另类| 无码人妻精品一区二区50| 成人高清视频免费观看| 日韩人妻一区二区三区蜜桃视频| 成人深夜福利| 中文字幕国产亚洲| 怡红院av久久久久久久| 99久久久精品| 成人在线国产视频| 综合伊人久久| 欧美精品久久一区二区 | 黄一区二区三区| 性欧美精品一区二区三区在线播放| 咪咪网在线视频| 亚洲国产精品久久久久秋霞不卡| 欧美丰满艳妇bbwbbw| 久久国产欧美日韩精品| 亚洲精品美女久久7777777| 日韩电影免费观| 亚洲欧美一区二区三区四区| 五月婷婷视频在线| 91麻豆国产自产在线观看| 久草热视频在线观看| 动漫3d精品一区二区三区乱码| 欧美精品日韩www.p站| 99国产精品99| 亚洲午夜一二三区视频| 黄色国产在线视频| 日韩一级网站| 欧美韩国日本精品一区二区三区| 国产美女高潮在线| 日韩三级在线观看| 国产精品999久久久| 不卡av在线网| 人妻无码视频一区二区三区| 成人三级视频| 91精品视频观看| 青草在线视频在线观看| 亚洲电影成人av99爱色| 国产www在线| 久久夜色精品一区| 怡红院亚洲色图| 欧美激情91| 狠狠色综合色区| 成人短视频app| 日韩一二三在线视频播| 999精品国产| 亚洲国产中文字幕在线视频综合| 91玉足脚交白嫩脚丫| 久久一综合视频| 一区二区三区欧美在线| 日韩欧美中文字幕在线视频| 久久免费精品日本久久中文字幕| 四虎在线观看| 欧美丰满美乳xxx高潮www| 欧美成人精品欧美一| 91视频一区二区三区| 国产在线精品自拍| 日韩一级片大全| 免费成人在线观看视频| 91精品国产毛片武则天| 老司机精品在线| 国产精品日韩av| 男女视频在线| 国产精品成人在线观看| 久久av一区二区三区漫画| 日韩成人高清| 欧美成人精品影院| 精品av中文字幕在线毛片| 69久久99精品久久久久婷婷 | 亚洲成人动漫av| 丁香激情五月少妇| 成人一区二区三区在线观看| 激情婷婷综合网| 精品999日本| 亚洲欧洲精品一区二区三区波多野1战4| 91精品啪在线观看国产爱臀| 国产精品1区2区在线观看| 青草在线视频| 色婷婷综合久久久久中文字幕1| 少妇高潮一区二区三区69| 538在线一区二区精品国产| 国产精品视频一区在线观看| 一区二区三区欧美视频| 五月婷婷欧美激情| av不卡在线观看| 国产精品91av| 久久精品久久综合| 免费裸体美女网站| 亚洲成人中文| 潘金莲一级淫片aaaaaa播放1| 国产一区二区欧美| 精品欧美一区二区在线观看视频| 欧美性生活一级| 国产精品人成电影| 亚洲综合在线电影| 欧美自拍视频在线| 免费成人在线电影| 久久久久国产视频| 四季久久免费一区二区三区四区| 中文字幕视频在线免费欧美日韩综合在线看 | 你懂的国产视频| 一卡二卡欧美日韩| 三级影片在线看| 亚洲精品日产精品乱码不卡| 欧美自拍偷拍网| 国产精品久久精品日日| 亚洲色图第四色| 欧美激情一区不卡| 欧美黄色高清视频| 中文字幕第一区二区| a级大片在线观看| 久久精品在线免费观看| 亚洲av无码一区二区二三区| 99国产精品久久久久| 日韩无码精品一区二区| proumb性欧美在线观看| 日韩精品视频一区二区| 97精品久久久午夜一区二区三区| 亚洲久久久久久| 99久久免费精品| 久久久久国产精品区片区无码| av在线播放成人| 中文字幕在线观看网址| 26uuu亚洲综合色欧美| 美女又爽又黄视频毛茸茸| 久久综合久久综合亚洲| 欧洲女同同性吃奶| 国产精品乱码久久久久久| 亚洲一级理论片| 综合久久国产九一剧情麻豆| 欧美做爰爽爽爽爽爽爽| 一区二区三区在线播| 国产一级片网址| 欧美性极品xxxx娇小| 波多野结衣黄色网址| 欧美日本一区二区三区| 国产高潮在线观看| 亚洲国产精品成人一区二区| 亚洲 欧美 激情 小说 另类| 亚洲欧美国产日韩天堂区| av福利在线播放| 欧美成人黑人xx视频免费观看| 国模私拍视频在线播放| 日本aⅴ大伊香蕉精品视频| 成人性片免费| 成人永久免费| 欧美另类69xxxxx| 黄色小视频大全| 在线一区免费观看| 男女视频在线看| 国产成人自拍在线| 熟女人妻在线视频| 自拍视频在线观看一区二区| 国产又大又黑又粗免费视频| 欧洲色大大久久| 午夜精品久久久久久久96蜜桃 | 欧美酷刑日本凌虐凌虐| 亚洲AV无码精品色毛片浪潮| 日韩精品欧美激情| 免费的黄网站在线观看| 性欧美在线看片a免费观看| 成人国产精品一区二区免费麻豆 | 91丨九色丨蝌蚪| av中文字幕不卡| 国产精品国产三级国产传播| 亚洲va国产va欧美va观看| 国产精品无码一区| 亚洲成人精品在线| 无遮挡的视频在线观看| 91禁国产网站| 国产一区二区高清在线| 欧美日韩在线观看一区| 欧美日韩一卡| 亚欧激情乱码久久久久久久久| 成人在线视频一区二区| 国产小视频你懂的| 韩曰欧美视频免费观看| 国产sm在线观看| 中文字幕日韩经典| 精品久久久在线观看| 国产精品伦理一区| 亚洲欧美视频在线| 久久大胆人体| 91免费福利视频| 欧美一二区在线观看| 男人添女人下面高潮视频| 国产综合色在线视频区| 高清国产在线观看| 欧美日韩国产精品专区| 国内老熟妇对白hdxxxx| 色爱精品视频一区| 免费在线观看一区| 欧美国产一二三区| 亚洲综合日韩| 中文字幕精品视频在线| 一区二区激情视频| 99精品久久久久久中文字幕| 日韩中文字幕在线看| 日本一区免费网站| 日本电影一区二区三区| 免费国产自线拍一欧美视频| 中文字幕乱码一区| 亚洲二区在线观看| 囯产精品一品二区三区| 欧美激情在线观看| 一区二区三区亚洲变态调教大结局 | 欧美区亚洲区| 亚洲国产综合av| 亚洲人成亚洲人成在线观看图片| 在线播放成人av| www亚洲精品| 久久国产精品美女| 日韩精品福利片午夜免费观看| 国产一区二区三区四区在线观看| 99久久久无码国产精品不卡| 欧美色网一区二区| 色影院视频在线| 亚洲一区久久久| 欧美激情成人在线| 成人性生活免费看| 日韩欧美在线观看视频| 久久精品a一级国产免视看成人| 热99久久精品| 欧美精品一区二区三区精品| 成年人在线观看视频免费| 中文字幕成人av| 一区二区三区午夜| 欧美久久精品一级黑人c片| 日韩一级淫片| 成年人网站国产| 久久蜜桃一区二区| 真实新婚偷拍xxxxx| 日韩在线观看av| 亚洲日本va午夜在线电影| 国产一区二区三区小说| 99精品视频在线播放观看| www.日韩一区| 久久夜色精品国产欧美乱| 成人高潮视频| 毛片av免费在线观看| 国产精品福利在线播放| 亚洲av综合色区无码一区爱av| 97人洗澡人人免费公开视频碰碰碰| 欧美在线关看| 亚洲欧美在线精品| 亚洲愉拍自拍另类高清精品| 五月激情婷婷综合| 国产精品欧美日韩久久| 欧美精品一区二区三区久久久竹菊| 中文字幕在线永久| 欧美午夜免费电影| 麻豆福利在线观看| 色综合久久av| 国产a久久麻豆| 久久影视中文字幕| 欧美第一页在线| 精品视频99| 91超薄肉色丝袜交足高跟凉鞋| 色94色欧美sute亚洲线路二| 26uuu亚洲电影在线观看| 久久久久成人精品免费播放动漫| 美女视频黄a大片欧美| 国产在线观看免费视频今夜| 亚洲人成电影在线| 试看120秒一区二区三区| 欧美 国产 小说 另类| 亚洲女人小视频在线观看| 欧美视频综合| 懂色av一区二区三区在线播放| 日韩国产精品久久久久久亚洲|