2013-05-13 1 views
-1

이 코드는 entities이 매개 변수로받은 List <String> 인 곳입니다. 나는 entities[x]을 어떤 식 으로든 가능한 문자열로 던지려고했는데 심지어 이미 문자열이되었다. 또한 entities[x] is String 항상 true을 반환했는지 확인했습니다.C에서 indexof 메서드를 사용한 이상한 동작 #

for(int x = 0; x < entities.Count; x++) 
{ 
    Console.WriteLine(entities[x] + " " + "a pencil g smartboard tabletc pencil ".IndexOf(entities[x])); 
} 

결과는 다음과 같습니다

pencil 30 
smartboard 11 
tabletc -1 

왜 같이 IndexOf 반환 -1 "tabletc"에 대한?

+3

'엔터티'를 채우는 위치를 포함하여 완전한 예를 보여주십시오. –

+4

아마도 엔티티에서'tabletpc'을 가지고 있기 때문에 – SwDevMan81

+0

@ SwDevMan81 문자열에 -1이 아닌 @ 대신 문자열의 위치를 ​​표시해야합니까? –

답변

1

사용자의 입력에서 문자열은 ASCII, 백 스페이스 문자로 시작 8

시도 \b는 백 스페이스 문자를 의미

"... \btabletc ...".IndexOf(entities[2]) 

같은.

+0

@ dlev의 제안 인'char.IsLetterOrDigit()'를 사용하여 해결했습니다. 그러나 문제를 발견했습니다. 감사합니다! –

0

다음 프로그램이 프로그램은 컴파일 가능한 것이다

pencil 2 
smartboard 11 
tabletc 22 

출력한다. 당신이 그것을 시도하면 출력은 무엇입니까? 예상대로 작동하는 경우

using System; 
using System.Collections.Generic; 

namespace Demo 
{ 
    class Program 
    { 
     void test() 
     { 
      var entities = new List<string> { "pencil", "smartboard", "tabletc" }; 

      for (int x = 0; x < entities.Count; x++) 
       Console.WriteLine(entities[x] + " " + "a pencil g smartboard tabletc pencil ".IndexOf(entities[x])); 
     } 

     static void Main() 
     { 
      new Program().test(); 
     } 
    } 
} 

, 당신의 다음 단계는 입력이 다른 곳을보고있다.


[편집]

나는 당신의 페이스트 빈 코드를보고, 나는 내가 만든 테스트 파일을 시도하고 확인했다. 그러나 내가 복사 (페이스트 빈에서) 메소드 출력, 나는 BEL 문자와 그 안에 포함 된 BS 문자가 있음 무엇을 발견했다 코멘트 붙여 넣을 때

//this method outputs: 
    //3 
    //pencil 
    //smartboard 
    //tabletc 

당신이 그 문자를 볼 수 있습니다 ,하지만 메모장에 텍스트를 복사/붙여 넣기하면 ++가 나타납니다. 파일에서 읽었을 수 있으며 문자열의 일부인 것처럼 보이는 것은 의심 스럽지만 보이지는 않습니다. 그러나 문자열 일치에 영향을 미칩니다.

내가 여기에 붙여 넣었을 때 그 문자는 제거되었지만 31 - 35 행의 pastebin에 있습니다. Notepad ++에 복사/붙여 넣기를 시도하십시오.

+0

예상대로 작동합니다. 엔터티를 채우는 코드가 있습니다. http://pastebin.com/mfnEcGBX –

+0

@FredericoSchardong 최신 편집 내역보기; 어쩌면 그것은 단서 일 수 있습니다. –