Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
This repository was archived by the owner on Jan 6, 2023. It is now read-only.

Commit 18183a1

Browse files
✨ PatternFinder!
1 parent b24786b commit 18183a1

File tree

3 files changed

+199
-0
lines changed

3 files changed

+199
-0
lines changed
4.48 KB
Binary file not shown.
Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
package SomeUtils.Pattern;
2+
3+
public class PatternFinder{
4+
//Just a demo
5+
public static void main(String[]a){
6+
final PatternFinder finder=new PatternFinder("He had three simple rules by which he lived. The first was to never eat blue food. There was nothing in nature that was edible that was blue. People often asked about blueberries, but everyone knows those are actually purple. He understood it was one of the stranger rules to live by, but it had served him well thus far in the 50+ years of his life.");
7+
System.out.println("Find the occurence for... nothing:");
8+
for(String[] s:finder.findAll(0).getArray()){
9+
System.out.println(java.util.Arrays.toString(s));
10+
}
11+
System.out.println("Find the occurence for everything:");
12+
for(String[] s:finder.findAll(finder.getInput().length()).getArray()){
13+
System.out.println(java.util.Arrays.toString(s));
14+
}
15+
System.out.println("Find the occurence for each character:");
16+
for(String[] s:finder.findAll(1).getArray()){
17+
System.out.println(java.util.Arrays.toString(s));
18+
}
19+
System.out.println("~substring of length 4:");
20+
for(String[] s:finder.findAll(4).getArray()){
21+
System.out.println(java.util.Arrays.toString(s));
22+
}
23+
System.out.println("~character but without those that only shows up once:");
24+
for(String[] s:finder.findAll(1).removeOnes().getArray()){
25+
System.out.println(java.util.Arrays.toString(s));
26+
}
27+
System.out.println("~substring of length 4 but without those that only shows up once:");
28+
for(String[] s:finder.findAll(4).removeOnes().getArray()){
29+
System.out.println(java.util.Arrays.toString(s));
30+
}
31+
}
32+
//The class itself
33+
final String input;
34+
String[][] output;
35+
public PatternFinder(final String in){
36+
input=in;
37+
}
38+
public PatternFinder findAll(final int size){
39+
if(size==input.length()){
40+
output=new String[][]{{input, "1"}};
41+
return this;
42+
}
43+
if(size<1){
44+
//Not going to thow an Exception, for now.
45+
//Decode "Infinity" using `Double.parseDouble("Infinity");`
46+
output=new String[][]{{"", "Infinity"}};
47+
return this;
48+
}
49+
//Optimized for 1 char situation.
50+
//More or less, O(n2).
51+
if(size==1){
52+
final int[] num=new int[input.length()];
53+
//StringBuilder doesn't make sense in this context.
54+
String builder="";
55+
String temp=input;
56+
int ind=0;
57+
while(temp.length()!=0){
58+
final String temp2=temp.replace(temp.substring(0, 1), "");
59+
num[ind]=temp.length()-temp2.length();
60+
builder+=temp.substring(0, 1);
61+
temp=temp2;
62+
ind++;
63+
}
64+
final char[] arr=builder.toCharArray();
65+
final String[][] result=new String[arr.length][2];
66+
for(int i=0;i<result.length;i++){
67+
result[i][0]=Character.toString(arr[i]);
68+
result[i][1]=String.valueOf(num[i]);
69+
}
70+
output=result;
71+
return this;
72+
}
73+
//More or less, O(n3). Don't blame me for that.
74+
final int[] num=new int[input.length()];
75+
final String[] builder=new String[input.length()];
76+
int ind=0;
77+
for(int i=0;i+size<input.length();i++){
78+
final String substring=input.substring(i, i+size);
79+
for(int j=0;j<builder.length;j++){
80+
if(builder[j]!=null&&(
81+
builder[j].equals(substring)||builder[j]==substring
82+
)
83+
)
84+
break;
85+
if(j==builder.length-1){
86+
num[ind]=(int)((input.length()-input.replace(
87+
substring, ""
88+
).length())/size);
89+
builder[ind]=substring;
90+
ind++;
91+
break;
92+
}
93+
}
94+
}
95+
final String[][] result=new String[ind][2];
96+
for(int i=0;i<result.length;i++){
97+
result[i][0]=builder[i];
98+
result[i][1]=String.valueOf(num[i]);
99+
}
100+
output=result;
101+
return this;
102+
}
103+
public PatternFinder removeOnes(){
104+
final StringBuilder builder=new StringBuilder();
105+
for(int i=0;i<output.length;i++){
106+
final String s=output[i][1];
107+
if(s.equals("1")||s=="1")
108+
builder.append(String.valueOf(i)+",");
109+
}
110+
builder.delete(builder.length()-1, builder.length()-1);
111+
final String[] removeMe=builder.toString().split(",");
112+
if(removeMe.length==output.length){
113+
output=new String[0][2];
114+
return this;
115+
}
116+
final String[][] out=new String[output.length-removeMe.length][2];
117+
int ind=0;
118+
int ind2=0;
119+
for(int i=0;i<output.length;i++){
120+
if(Integer.parseInt(removeMe[ind])==i)
121+
ind++;
122+
else{
123+
out[ind2][0]=output[i][0];
124+
out[ind2][1]=output[i][1];
125+
ind2++;
126+
}
127+
}
128+
output=out;
129+
return this;
130+
}
131+
public String getInput(){
132+
return input;
133+
}
134+
public String[][] toArray(){
135+
return getArray();
136+
}
137+
public String[][] getArray(){
138+
return output;
139+
}
140+
}

‎src/SomeUtils/Pattern/README.md

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
# SomeUtils/Pattern
2+
3+
```java
4+
package SomeUtils.Pattern;
5+
```
6+
7+
---
8+
9+
## PatternFinder.java
10+
11+
```java
12+
import SomeUtils.Pattern.PatternFinder;
13+
```
14+
---
15+
16+
### Public Methods
17+
18+
---
19+
20+
```java
21+
public PatternFinder(final String in);
22+
```
23+
24+
Initialize the PatternFinder by giving it a String to find patterns in.
25+
26+
---
27+
28+
```java
29+
public PatternFinder findAll(final int size);
30+
```
31+
32+
Find all patterns of a specific length/size.
33+
34+
---
35+
36+
```java
37+
public PatternFinder removeOnes();
38+
```
39+
40+
Remove all patterns that only occur once in the input String.
41+
42+
---
43+
44+
```java
45+
public String getInput();
46+
```
47+
48+
Get the input String passed into the constructor.
49+
50+
---
51+
52+
```java
53+
public String[][] toArray();
54+
public String[][] getArray();
55+
```
56+
57+
Get the internal array to be used later on.
58+
59+
---

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /