fix: Consider the case where the position is not defined. In this case, if the content is identical, you can assume that you have found the token corresponding to the comment.
diff --git a/javaparser-core/src/main/java/com/github/javaparser/printer/lexicalpreservation/LexicalPreservingPrinter.java b/javaparser-core/src/main/java/com/github/javaparser/printer/lexicalpreservation/LexicalPreservingPrinter.java
index 8089a71..8e3f8fc 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/printer/lexicalpreservation/LexicalPreservingPrinter.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/printer/lexicalpreservation/LexicalPreservingPrinter.java
@@ -349,11 +349,12 @@
 						.filter(t -> t.getText().trim().equals((oldValue.asString()).trim()))
 						.collect(toList());
 			}
-			// To check that a comment matches in the list of tokens, the range must be always checked,
+			// To check that a comment matches in the list of tokens, if exists the range must be always checked,
 			// as comments with the same content may exist on different lines.
             return matchingTokens.stream()
-                		.filter(t -> t.getToken().hasRange() && oldValue.hasRange())
-                		.filter(t -> t.getToken().getRange().get().equals(oldValue.getRange().get()))
+                		.filter(t -> (!t.getToken().hasRange() && !oldValue.hasRange())
+                				|| (t.getToken().hasRange() && oldValue.hasRange()
+                						&& t.getToken().getRange().get().equals(oldValue.getRange().get())))
                 		.collect(toList());
         }