substring
다른 문자에서 가장 오른쪽에있는 6 개의 문자로 구성된 a 를 어떻게 추출 할 수 있습니까?string
있습니까?
예 : 내 문자열은 "PER 343573"
. 이제 "343573"
.
어떻게 할 수 있습니까?
string endOfString = Strings.Right(wholeString, 6);
substring
다른 문자에서 가장 오른쪽에있는 6 개의 문자로 구성된 a 를 어떻게 추출 할 수 있습니까?string
있습니까?
예 : 내 문자열은 "PER 343573"
. 이제 "343573"
.
어떻게 할 수 있습니까?
string endOfString = Strings.Right(wholeString, 6);
답변:
string SubString = MyString.Substring(MyString.Length-6);
확장 방법을 작성하여 Right(n);
함수 . 함수는 빈 문자열을 반환하는 null 또는 빈 문자열, 원래 문자열을 반환하는 최대 길이보다 짧은 문자열 및 가장 오른쪽 문자의 최대 길이를 반환하는 최대 길이보다 긴 문자열을 처리해야합니다.
public static string Right(this string sValue, int iMaxLength)
{
//Check if the value is valid
if (string.IsNullOrEmpty(sValue))
{
//Set valid empty string as string could be null
sValue = string.Empty;
}
else if (sValue.Length > iMaxLength)
{
//Make the string no longer than the max length
sValue = sValue.Substring(sValue.Length - iMaxLength, iMaxLength);
}
//Return the string
return sValue;
}
sValue.Length > iMaxLength
하위 문자열이 호출되기 전과 같지 않습니다 !
확장 방법을 사용하는 것이 더 좋을 것입니다.
public static class StringExtensions
{
public static string Right(this string str, int length)
{
return str.Substring(str.Length - length, length);
}
}
용법
string myStr = "PER 343573";
string subStr = myStr.Right(6);
str.Length - length
음수가 될 수 있습니다. 또한 두 번째 매개 변수는 선택 사항입니다. 길이를 통과 할 필요가 없습니다.
using System;
public static class DataTypeExtensions
{
#region Methods
public static string Left(this string str, int length)
{
str = (str ?? string.Empty);
return str.Substring(0, Math.Min(length, str.Length));
}
public static string Right(this string str, int length)
{
str = (str ?? string.Empty);
return (str.Length >= length)
? str.Substring(str.Length - length, length)
: str;
}
#endregion
}
오류가 발생하지 않으면 null을 빈 문자열로 반환하고 잘린 값 또는 기본 값을 반환합니다. "testx".Left (4) 또는 str.Right (12);
문자열의 길이는 확실하지 않지만 단어 수 (이 경우에는 'xxx yyyyyy'와 같이 항상 2 단어)를 알고 있다면 split을 사용하는 것이 좋습니다.
string Result = "PER 343573".Split(" ")[1];
이것은 항상 문자열의 두 번째 단어를 반환합니다.
이것은 정확히 당신이 요구하는 것은 아니지만 예제를 보면 문자열의 숫자 섹션을 찾고있는 것 같습니다.
이것이 항상 그런 경우라면 정규 표현식을 사용하는 것이 좋습니다.
var regex= new Regex("\n+");
string numberString = regex.Match(page).Value;
당신이 모든 컴파일 .NET, 사용하고 있기 때문에 MSIL은 단지 참조 Microsoft.VisualBasic을 하고 사용을 마이크로 소프트의 내장 Strings.Right
방법 :
using Microsoft.VisualBasic;
...
string input = "PER 343573";
string output = Strings.Right(input, 6);
사용자 지정 확장 방법이나 다른 작업을 만들 필요가 없습니다. 결과는 하나의 참조와 하나의 간단한 코드 라인으로 달성됩니다.
이에 대한 추가 정보로 C #과 함께 Visual Basic 메서드를 사용하는 것은 다른 곳 에서 문서화되었습니다 . 개인적으로 파일을 구문 분석하려고 할 때 처음으로 우연히 발견 했으며 클래스 사용에 대한 이 SO 스레드 가 Microsoft.VisualBasic.FileIO.TextFieldParser
.csv 파일 구문 분석에 매우 유용하다는 것을 알았습니다 .
var str = "PER 343573";
var right6 = string.IsNullOrWhiteSpace(str) ? string.Empty
: str.Length < 6 ? str
: str.Substring(str.Length - 6); // "343573"
// alternative
var alt_right6 = new string(str.Reverse().Take(6).Reverse().ToArray()); // "343573"
이것은 str
. 지원하지 않는 대체 코드null
문자열을 . 첫 번째는 더 빠르고 두 번째는 더 콤팩트합니다.
알고 있다면 두 번째를 선호합니다 str
포함하는 짧은 문자열을 합니다. 긴 문자열 인 경우 첫 번째 문자열이 더 적합합니다.
예 :
var str = "";
var right6 = string.IsNullOrWhiteSpace(str) ? string.Empty
: str.Length < 6 ? str
: str.Substring(str.Length - 6); // ""
// alternative
var alt_right6 = new string(str.Reverse().Take(6).Reverse().ToArray()); // ""
또는
var str = "123";
var right6 = string.IsNullOrWhiteSpace(str) ? string.Empty
: str.Length < 6 ? str
: str.Substring(str.Length - 6); // "123"
// alternative
var alt_right6 = new string(str.Reverse().Take(6).Reverse().ToArray()); // "123"
널 안전 방법 :
원래 문자열을 반환하는 최대 길이보다 짧은 문자열
문자열 오른쪽 확장 방법
public static string Right(this string input, int count) =>
String.Join("", (input + "").ToCharArray().Reverse().Take(count).Reverse());
문자열 왼쪽 확장 방법
public static string Left(this string input, int count) =>
String.Join("", (input + "").ToCharArray().Take(count));
여기 내가 사용하는 해결책이 있습니다. 입력 문자열의 길이가 요청 된 길이보다 작지 않은지 확인합니다. 위에 게시 된 솔루션은 불행히도이를 고려하지 않아 충돌이 발생할 수 있습니다.
/// <summary>
/// Gets the last x-<paramref name="amount"/> of characters from the given string.
/// If the given string's length is smaller than the requested <see cref="amount"/> the full string is returned.
/// If the given <paramref name="amount"/> is negative, an empty string will be returned.
/// </summary>
/// <param name="string">The string from which to extract the last x-<paramref name="amount"/> of characters.</param>
/// <param name="amount">The amount of characters to return.</param>
/// <returns>The last x-<paramref name="amount"/> of characters from the given string.</returns>
public static string GetLast(this string @string, int amount)
{
if (@string == null) {
return @string;
}
if (amount < 0) {
return String.Empty;
}
if (amount >= @string.Length) {
return @string;
} else {
return @string.Substring(@string.Length - amount);
}
}
이것이 제가 사용하는 방법입니다. 저는 일을 단순하게 유지하는 것을 좋아합니다.
private string TakeLast(string input, int num)
{
if (num > input.Length)
{
num = input.Length;
}
return input.Substring(input.Length - num);
}
//s - your string
//n - maximum number of right characters to take at the end of string
(new Regex("^.*?(.{1,n})$")).Replace(s,"$1")
비트 변환기 및 비트 시프 팅 (인코딩 확인 필요)에 의존하지 않고 확장 방법 'Right'로 사용하는 가장 빠른 방법입니다.
string myString = "123456789123456789";
if (myString > 6)
{
char[] cString = myString.ToCharArray();
Array.Reverse(myString);
Array.Resize(ref myString, 6);
Array.Reverse(myString);
string val = new string(myString);
}
Array.Reverse
문자열이 아닌 배열을 취하고 if (myString.length > 6)
. 구문 오류를 제외하고 이것이 가장 빠른 방법 인 이유는 무엇입니까? 확실히 하위 문자열을 사용하는 것이 더 나은 방법 일 것입니다.이 모든 배열 복사가 필요하지는 않습니다.
Min을 사용하여 부정적인 상황을 방지하고 null 문자열도 처리합니다.
// <summary>
/// Returns a string containing a specified number of characters from the right side of a string.
/// </summary>
public static string Right(this string value, int length)
{
string result = value;
if (value != null)
result = value.Substring(0, Math.Min(value.Length, length));
return result;
}