Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java文本文件中查找目标模式_Java_Regex_Pattern Matching_Text Files - Fatal编程技术网

在java文本文件中查找目标模式

在java文本文件中查找目标模式,java,regex,pattern-matching,text-files,Java,Regex,Pattern Matching,Text Files,我有一个只有+和空格的文本文件。我必须在这个文件中找到一个看起来像宇宙飞船的目标。但是宇宙飞船并不一定要完美 提前谢谢 这是带有目标的文本文件,是一个较小的版本。此中至少有一个目标 + ++ + + + + + + + +++ + + ++ + + ++ + + ++ ++ + + + + + + ++ + + ++++ ++ +

我有一个只有+和空格的文本文件。我必须在这个文件中找到一个看起来像宇宙飞船的目标。但是宇宙飞船并不一定要完美

提前谢谢

这是带有目标的文本文件,是一个较小的版本。此中至少有一个目标

+ ++ +   + + +    +     +  + +++  +              
         +   ++ + + ++    +   +  ++ ++ +      +    
   +  +            + +     ++ +   +  ++++ ++         
+    +   ++++       + ++ +      ++ +                       
 +               +     +   + ++ +   ++   +     +    
 +      +              +       + ++ + +  +       +   
         +  +    ++ +     +   +++ ++  +++          
 +   +       + +         ++    + ++  ++      +  ++  
+    +    +         + + ++  + + + + ++  + +         
+   ++        +  +             ++ ++ +++        +      
         +  ++ +   ++       +   + +   + ++   ++ +  
 + +    ++ ++   +      +       +            +   +  
    + +  + +         +       ++    +     +  
这就是目标

    +     
    +     
   +++    
 +++++++  
 ++   ++  
++  +  ++ 
++ +++ ++ 
++  +  ++ 
 ++   ++  
 +++++++  
   +++    

我尝试过正则表达式模式读取,但文件太大,所以我决定反对。我不知道还有什么办法可以解决这个问题。

我认为你不可能也不需要在这里做任何真正有趣的事情

您可以从编码模式开始。在这种情况下,您可以:

  • 将每行编码为字符串,并将行本身编码为数组:
    string[]
  • 将每一行编码为字符串,并将行本身编码为列表:
    List
  • 将每行编码为字符[],并将行本身编码为数组:
    char[][]
  • 编号3的好处是,您可以轻松地将其索引为矩阵:

    char[][] matrix = ...;
    char ch = matrix[row][column];
    
    所以你有:

    char[][] search = new char[searchRows][searchColumns];
    char[][] target = new char[targetRows][targetColumns];
    
    您可以是:

  • 对于搜索中可能出现的每个目标位置,计算相等的字符数
  • 相等字符数最多的位置获胜
  • 将相等字符的数量除以目标中的字符总数,得到一个百分比
  • 如果百分比超过某个阈值,则为匹配
  • 步骤1:

    最大行数或列数是搜索模式中的行数或列数减去目标模式中的行数或列数

    int maxMatch = 0;
    int maxMatchRow = -1;
    int maxMatchColumn = -1;
    for (int row = 0; row <= searchRows - targetRows; row++) {
        for (int column = 0; columns <= searchColumns - targetColumns; column++) {
            int match = calculateMatch(search, target, row, column);
            if (match > maxMatch) {
                maxMatchRow = row;
                maxMatchColumn = column;
            }
        }
    }
    
    int-maxMatch=0;
    int maxMatchRow=-1;
    int maxMatchColumn=-1;
    
    对于(int row=0;row那么你想要一艘宇宙飞船,嗯!你说的“宇宙飞船不一定是完美的”是什么意思?如果问得好的话,我真的很喜欢这个问题。这对我来说是一个很好的谜题!可能是50%或70%或更高的百分比。那么你想要模糊模式匹配吗?这不仅仅是我在文件中寻找的一个目标。有about 10个目标。我包含的位仅包含1个目标,以给出问题的示例。然后搜索10个目标,找到得分百分比最高的目标。只需编写更多代码。为每个方法指定自己的名称,以便您可以轻松地从另一个方法调用它,该方法将每个目标的得分组合在一起。