从某个字符读取字符串

时间:2017-06-06 07:48:37

标签: c# string

我想知道是否可以读取某个n长度的字符串,从x字符到y字符,而不必将其拆分成更小的部分。

对于AD CN=someName,OU=someGroup,OU=groups,DC=some,DC=domain,DC=com中的路径,我有以下字符串,我希望能够只读取someName部分,而不会按=或{,进行拆分{1}}首先。我如何实现这一目标?

原因是,我现在不需要进行小组比较:

SearchResult t1 = search.FindOne();
foreach (string s in t1.Properties["memberof"])
{
    foreach (string g in groups)
    {
        if (s.ToLower().Contains(g.ToLower()))
        {
            // do something
        }
    }
}

我宁愿将if子句设为equals,但我不想总是将上面的路径/组分成两次。我该怎么做?

4 个答案:

答案 0 :(得分:4)

使用IndexOfSubstring的简单字符串操作:

string s = "CN=someName,OU=someGroup,OU=groups,DC=some,DC=domain,DC=com";

const string prefix = "CN=";
int start = s.IndexOf(prefix);
if (start >= 0)
{
    string value = s.Substring(start + prefix.Length, s.IndexOf(',', start) - prefix.Length);
    Console.WriteLine(value);
}

请注意,如果 CN=条目是行中的最后一个(因为它没有以逗号终止),这个简单示例将失败。您可以先查看第二个IndexOf来电的返回值来检查。

但在这种情况下,CN=通常是第一件事。

答案 1 :(得分:1)

如果您正在进行组比较,我会使用System.DirectoryServices.AccountManagement命名空间

PrincipalContext Context = new PrincipalContext(ContextType.Domain, "");
UserPrincipal Usr = UserPrincipal.FindByIdentity(Context, "User");
GroupPrincipal G = GroupPrincipal.FindByIdentity(Context, "Group");

if(Usr.IsMemberOf(G)) {

}

答案 2 :(得分:0)

使用Split,您可以检查给定键的任何是否等于搜索值。

var val = "CN=someName,OU=someGroup,OU=groups,DC=some,DC=domain,DC=com";
var prefix = "CN";
var searchValue = "someName";
var contains = val.Split(',').Any(value => value.Split('=')[0] == prefix && value.Split('=')[1] == searchValue);

如果检查值是否等于搜索值,您也可以返回该值。

var val = "CN=someName,OU=someGroup,OU=groups,DC=some,DC=domain,DC=com";
var prefix = "CN";
var foundValue = val.Split(',').FirstOrDefault(value => value.Split('=')[0] == prefix)?.Split('=')[1];

我仍然使用Split,尽管你说你不想使用它,因为我认为它是一个不错的单线。

答案 3 :(得分:0)

您可以使用const string input = "CN=someName,OU=someGroup,OU=groups,DC=some,DC=domain,DC=com"; const string start = "CN="; const string stop = ","; int startIndex = input.IndexOf(start, 0); int stopIndex = input.IndexOf(stop, startIndex); var extracted = input.Substring(startIndex + start.Length, stopIndex - startIndex - start.Length); Console.WriteLine(extracted); 找到正确的偏移量,然后使用public class MainActivity extends AppCompatActivity { private WebView mWebView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mWebView = (WebView) findViewById(R.id.mWebView); mWebView.getSettings().setJavaScriptEnabled(true); //mWebView.loadUrl("http://edition.cnn.com/"); mWebView.loadUrl("http://10.0.2.2:8080/MissionsWS/myLogin.jsp"); } } 来阅读您想要的部分。

SELECT COUNT(is_correct), msisdn 
FROM [robi_contest].[dbo].[tbl_quiz_reply] 
WHERE is_correct = 1 group by msisdn

.net Fiddle

PS:也许你可以看一下Is there a .NET class that can parse CN= strings out of LDAP?的特殊用例!