1 ÿþ *
* P o r t o f S n o w b a l l s t e m m e r s o n C #
* O r i g i n a l s t e m m e r s c a n b e f o u n d o n h t t p : / / s n o w b a l l . t a r t a r u s . o r g
* L i c e n c e s t i l l B S D : h t t p : / / s n o w b a l l . t a r t a r u s . o r g / l i c e n s e . p h p
*
* M o s t o f s t e m m e r s a r e p o r t e d f r o m J a v a b y I v e o n i k S y s t e m s l t d . ( w w w . i v e o n i k . c o m )
*
* G e r m a n s t e m m e r ' s p o r t f o u n d o n S o u r c e F o r g e s i t e
* /
u s i n g S y s t e m ;
u s i n g S y s t e m . C o l l e c t i o n s . G e n e r i c ;
u s i n g S y s t e m . T e x t ;
u s i n g S y s t e m . T h r e a d i n g ;
n a m e s p a c e T r a c e L a b . C o m p o n e n t s . D e v e l o p m e n t K i t . P r e p r o c e s s o r s . S t e m m e r s . S n o w b a l l . L a n g u a g e s
{
/ / / < s u m m a r y >
/ / / G e r m a n l a n g u a g e S n o w b a l l i m p l e m e n t a t i o n
/ / / < / s u m m a r y >
p u b l i c c l a s s G e r m a n S t e m m e r : I S n o w b a l l S t e m m e r
/ / i n t e r n a l c l a s s S t e m m e r G e r m a n
{
p r i v a t e c h a r [ ] w o r d _ b u f f e r ;
p r i v a t e i n t S T R _ S I Z E , R 1 , R 2 ;
p r i v a t e i n t B U F F E R _ S I Z E ;
p r i v a t e c o n s t i n t I N C = 2 0 ; / / I f o u n d o u t t h i s i s o p t i m a l w o r d s t r i n g s i z e
/ / / < s u m m a r y >
/ / / C o n s t r u c t o r
/ / / < / s u m m a r y >
p u b l i c G e r m a n S t e m m e r ( )
{
S e t I n i t S t a t e ( ) ;
}
p r i v a t e v o i d S e t I n i t S t a t e ( )
{
R 1 = R 2 = - 1 ; S T R _ S I Z E = 0 ;
B U F F E R _ S I Z E = I N C ;
w o r d _ b u f f e r = n u l l ;
w o r d _ b u f f e r = n e w c h a r [ B U F F E R _ S I Z E ] ;
}
p r i v a t e v o i d I n c r e m e n t ( )
{
c h a r [ ] t m p _ b u f f e r = w o r d _ b u f f e r ;
B U F F E R _ S I Z E + = I N C ;
w o r d _ b u f f e r = n e w c h a r [ B U F F E R _ S I Z E ] ;
t m p _ b u f f e r . C o p y T o ( w o r d _ b u f f e r , 0 ) ;
t m p _ b u f f e r = n u l l ;
}
/ / i s c h a r v o w e l
/ *
* T h e f o l l o w i n g l e t t e r s a r e v o w e l s :
* a e i o u y ä ö ü
* /
p r i v a t e b o o l v o w e l ( c h a r c h )
{
s w i t c h ( c h )
{
c a s e ' a ' :
c a s e ' e ' :
c a s e ' i ' :
c a s e ' o ' :
c a s e ' u ' :
c a s e ' y ' :
c a s e ' ä ' :
c a s e ' ö ' :
c a s e ' ü ' : r e t u r n t r u e ;
d e f a u l t : r e t u r n f a l s e ;
}
}
/ / R 1 a n d R 2 s e t u p i n t h e s t a n d a r d w a y
p r i v a t e i n t D e f i n e R ( i n t s t a r t )
{
i n t l e n = S T R _ S I Z E ;
i f ( s t a r t = = 0 )
s t a r t = 1 ;
i f ( ( s t a r t < l e n ) & & ( s t a r t > 0 ) )
{
f o r ( i n t i = s t a r t ; i < l e n ; + + i )
{
i f ( ( ! v o w e l ( w o r d _ b u f f e r [ i ] ) ) & & v o w e l ( w o r d _ b u f f e r [ ( i - 1 ) ] ) )
r e t u r n ( ( i - s t a r t ) + s t a r t + 1 ) ;
}
}
r e t u r n - 1 ;
}
p r i v a t e v o i d S e t W o r d ( s t r i n g s t r W o r d )
{
/ / F i r s t , r e p l a c e ß b y s s
s t r i n g t m p = s t r W o r d . R e p l a c e ( " ß " , " s s " ) ;
/ / a d j u s t b u f f e r s i z e
w h i l e ( t m p . L e n g t h > B U F F E R _ S I Z E )
I n c r e m e n t ( ) ;
S T R _ S I Z E = t m p . L e n g t h ;
/ / f i l l i n t o b u f f e r
t m p . C o p y T o ( 0 , w o r d _ b u f f e r , 0 , S T R _ S I Z E ) ;
}
p r i v a t e v o i d C u t E n d ( i n t c o u n t ) { S T R _ S I Z E - = c o u n t ; }
p r i v a t e b o o l E n d s W i t h ( s t r i n g e n d )
{
i f ( S T R _ S I Z E > e n d . L e n g t h )
{
i n t s t o p = S T R _ S I Z E - e n d . L e n g t h - 1 ;
i n t j = e n d . L e n g t h - 1 ;
f o r ( i n t i = ( S T R _ S I Z E - 1 ) ; i > s t o p ; - - i )
{
i f ( w o r d _ b u f f e r [ i ] ! = e n d [ j ] )
r e t u r n f a l s e ;
- - j ;
}
r e t u r n t r u e ;
}
r e t u r n f a l s e ;
}
p r i v a t e v o i d p r e p r o c e s s ( )
{
/ / p u t u a n d y b e t w e e n v o w e l s i n t o u p p e r c a s e
f o r ( i n t i = 1 ; i < S T R _ S I Z E ; + + i )
{
i f ( w o r d _ b u f f e r [ i ] = = ' u ' )
{
i f ( v o w e l ( w o r d _ b u f f e r [ ( i - 1 ) ] ) & & v o w e l ( w o r d _ b u f f e r [ ( i + 1 ) ] ) )
w o r d _ b u f f e r [ i ] = ' U ' ;
}
e l s e i f ( w o r d _ b u f f e r [ i ] = = ' y ' )
{
i f ( v o w e l ( w o r d _ b u f f e r [ ( i - 1 ) ] ) & & v o w e l ( w o r d _ b u f f e r [ ( i + 1 ) ] ) )
w o r d _ b u f f e r [ i ] = ' Y ' ;
}
}
/ *
* R 1 a n d R 2 a r e f i r s t s e t u p i n t h e s t a n d a r d w a y ,
* b u t t h e n R 1 i s a d j u s t e d
* s o t h a t t h e r e g i o n b e f o r e i t c o n t a i n s a t l e a s t 3 l e t t e r s
* /
R 1 = D e f i n e R ( 0 ) ;
R 2 = D e f i n e R ( R 1 ) ;
i f ( ( R 1 < 3 ) & & ( R 1 > - 1 ) )
R 1 = 3 ;
}
/ *
* S e a r c h f o r t h e l o n g e s t a m o n g t h e f o l l o w i n g s u f f i x e s ,
* ( a ) e e m e n e r n e r e s
* ( b ) s ( p r e c e d e d b y a v a l i d s - e n d i n g )
* a n d d e l e t e i f i n R 1 .
* ( O f c o u r s e t h e l e t t e r o f t h e v a l i d s - e n d i n g i s n o t n e c e s s a r i l y i n R 1 )
*
* ( F o r e x a m p l e , ä c k e r n - > ä c k , a c k e r s - > a c k e r , a r m e s - > a r m )
* /
p r i v a t e v o i d S t e p 1 ( )
{
i f ( R 1 < 0 )
r e t u r n ;
/ / e e m e n e r n e r e s
i f ( E n d s W i t h ( " e r n " ) )
{
i f ( ( S T R _ S I Z E - R 1 ) > = 3 )
C u t E n d ( 3 ) ;
}
e l s e i f ( E n d s W i t h ( " e m " ) | | E n d s W i t h ( " e n " ) | | E n d s W i t h ( " e r " ) | | E n d s W i t h ( " e s " ) )
{
i f ( ( S T R _ S I Z E - R 1 ) > = 2 )
C u t E n d ( 2 ) ;
}
e l s e i f ( E n d s W i t h ( " e " ) )
{
i f ( ( S T R _ S I Z E - R 1 ) > = 1 )
C u t E n d ( 1 ) ;
}
/ / b , d , f , g , h , k , l , m , n , r o r t
e l s e i f ( E n d s W i t h ( " b s " ) | | E n d s W i t h ( " d s " ) | | E n d s W i t h ( " f s " ) | |
E n d s W i t h ( " g s " ) | | E n d s W i t h ( " h s " ) | | E n d s W i t h ( " k s " ) | |
E n d s W i t h ( " l s " ) | | E n d s W i t h ( " m s " ) | | E n d s W i t h ( " n s " ) | |
E n d s W i t h ( " r s " ) | | E n d s W i t h ( " t s " ) )
{
i f ( ( S T R _ S I Z E - R 1 ) > = 1 )
C u t E n d ( 1 ) ;
}
}
/ *
* S e a r c h f o r t h e l o n g e s t a m o n g t h e f o l l o w i n g s u f f i x e s ,
* ( a ) e n e r e s t
* ( b ) s t ( p r e c e d e d b y a v a l i d s t - e n d i n g , i t s e l f p r e c e d e d b y a t l e a s t 3 l e t t e r s )
* a n d d e l e t e i f i n R 1 .
*
* ( F o r e x a m p l e , d e r b s t e n - > d e r b s t b y s t e p 1 , a n d d e r b s t - > d e r b b y s t e p 2 , s i n c e b i s a v a l i d s t - e n d i n g , a n d i s p r e c e d e d b y j u s t 3 l e t t e r s )
* /
p r i v a t e v o i d S t e p 2 ( )
{
i f ( R 1 < 0 )
r e t u r n ;
/ / e n e r e s t
i f ( E n d s W i t h ( " e s t " ) )
{
i f ( ( S T R _ S I Z E - R 1 ) > = 3 )
C u t E n d ( 3 ) ;
}
e l s e i f ( E n d s W i t h ( " e n " ) | | E n d s W i t h ( " e r " ) )
{
i f ( ( S T R _ S I Z E - R 1 ) > = 2 )
C u t E n d ( 2 ) ;
}
/ / b , d , f , g , h , k , l , m , n o r t
e l s e i f ( E n d s W i t h ( " b s t " ) | | E n d s W i t h ( " d s t " ) | | E n d s W i t h ( " f s t " ) | |
E n d s W i t h ( " g s t " ) | | E n d s W i t h ( " h s t " ) | | E n d s W i t h ( " k s t " ) | |
E n d s W i t h ( " l s t " ) | | E n d s W i t h ( " m s t " ) | | E n d s W i t h ( " n s t " ) | |
E n d s W i t h ( " t s t " ) )
{
/ / p r e c e d e d b y a t l e a s t 3 l e t t e r s
i f ( S T R _ S I Z E > 5 )
{
i f ( ( S T R _ S I Z E - R 1 ) > = 2 )
C u t E n d ( 2 ) ;
}
}
}
p r i v a t e v o i d S t e p 3 ( )
{
i f ( ( R 2 < 0 ) | | ( R 1 < 0 ) )
r e t u r n ;
/ *
* S e a r c h f o r t h e l o n g e s t a m o n g t h e f o l l o w i n g s u f f i x e s ,
* a n d p e r f o r m t h e a c t i o n i n d i c a t e d .
* e n d u n g
* d e l e t e i f i n R 2
* i f p r e c e d e d b y i g , d e l e t e i f i n R 2 a n d n o t p r e c e d e d b y e
* /
i f ( E n d s W i t h ( " e n d " ) | | E n d s W i t h ( " u n g " ) )
{
i f ( ( S T R _ S I Z E - R 2 ) > = 3 )
C u t E n d ( 3 ) ;
i f ( E n d s W i t h ( " i g " ) & & ( w o r d _ b u f f e r [ ( S T R _ S I Z E - 3 ) ] ! = ' e ' ) )
{
i f ( ( S T R _ S I Z E - R 2 ) > = 2 )
C u t E n d ( 2 ) ;
}
}
/ *
* i g i k i s c h
* d e l e t e i f i n R 2 a n d n o t p r e c e d e d b y e
* /
e l s e i f ( ( E n d s W i t h ( " i g " ) | | E n d s W i t h ( " i k " ) ) & & ( w o r d _ b u f f e r [ ( S T R _ S I Z E - 3 ) ] ! = ' e ' ) )
{
i f ( ( S T R _ S I Z E - R 2 ) > = 2 )
C u t E n d ( 2 ) ;
}
e l s e i f ( E n d s W i t h ( " i s c h " ) & & ( w o r d _ b u f f e r [ ( S T R _ S I Z E - 5 ) ] ! = ' e ' ) )
{
i f ( ( S T R _ S I Z E - R 2 ) > = 4 )
C u t E n d ( 4 ) ;
}
/ *
* l i c h h e i t
* d e l e t e i f i n R 2
* i f p r e c e d e d b y e r o r e n , d e l e t e i f i n R 1
* /
e l s e i f ( E n d s W i t h ( " l i c h " ) | | E n d s W i t h ( " h e i t " ) )
{
C u t E n d ( 4 ) ;
/ / i f p r e c e d e d b y e r o r e n , d e l e t e i f i n R 1
i f ( E n d s W i t h ( " e n " ) | | E n d s W i t h ( " e r " ) )
{
i f ( ( S T R _ S I Z E - R 1 ) > = 2 )
C u t E n d ( 2 ) ;
e l s e
S T R _ S I Z E + = 4 ;
}
e l s e
{
S T R _ S I Z E + = 4 ;
i f ( ( S T R _ S I Z E - R 2 ) > = 4 )
C u t E n d ( 4 ) ;
}
}
/ *
* k e i t
* d e l e t e i f i n R 2
* i f p r e c e d e d b y l i c h o r i g , d e l e t e i f i n R 2
* /
e l s e i f ( E n d s W i t h ( " k e i t " ) )
{
i f ( ( S T R _ S I Z E - R 2 ) > = 4 )
C u t E n d ( 4 ) ;
/ / i f p r e c e d e d b y l i c h o r i g , d e l e t e i f i n R 2
i f ( E n d s W i t h ( " i g " ) )
{
i f ( ( S T R _ S I Z E - R 2 ) > = 2 )
C u t E n d ( 2 ) ;
}
e l s e i f ( E n d s W i t h ( " l i c h " ) )
{
i f ( ( S T R _ S I Z E - R 2 ) > = 4 )
C u t E n d ( 4 ) ;
}
}
}
/ / T u r n U a n d Y b a c k i n t o l o w e r c a s e ,
/ / a n d r e m o v e t h e u m l a u t a c c e n t f r o m a , o a n d u .
p r i v a t e v o i d F i n a l l y ( )
{
f o r ( i n t i = 0 ; i < S T R _ S I Z E ; + + i )
{
s w i t c h ( w o r d _ b u f f e r [ i ] )
{
c a s e ' ä ' :
w o r d _ b u f f e r [ i ] = ' a ' ; b r e a k ;
c a s e ' U ' :
w o r d _ b u f f e r [ i ] = ' u ' ; b r e a k ;
c a s e ' ü ' :
w o r d _ b u f f e r [ i ] = ' u ' ; b r e a k ;
c a s e ' Y ' :
w o r d _ b u f f e r [ i ] = ' y ' ; b r e a k ;
c a s e ' ö ' :
w o r d _ b u f f e r [ i ] = ' o ' ; b r e a k ;
d e f a u l t : b r e a k ;
}
}
}
p r i v a t e s t r i n g S t e m ( )
{
p r e p r o c e s s ( ) ;
S t e p 1 ( ) ;
S t e p 2 ( ) ;
S t e p 3 ( ) ;
F i n a l l y ( ) ;
/ / r e t u r n s t e m e d w o r d
r e t u r n n e w s t r i n g ( w o r d _ b u f f e r , 0 , S T R _ S I Z E ) ;
}
i n t c o u n t e r = 0 ;
/ / / < s u m m a r y >
/ / / S t e m s t e r m s i n t h e i n p u t s t r i n g
/ / / < / s u m m a r y >
/ / / < p a r a m n a m e = " w o r d " > I n p u t s t r i n g < / p a r a m >
/ / / < r e t u r n s > S t e m m e d t e r m s < / r e t u r n s >
p u b l i c s t r i n g S t e m ( s t r i n g w o r d )
{
i f ( c o u n t e r > 0 )
t h r o w n e w E x c e p t i o n ( " G e r m a n s t e m m e r i s n o t r e e n t e r a b l e . C r e a t e n e w i n s t a n c e " ) ;
I n t e r l o c k e d . I n c r e m e n t ( r e f c o u n t e r ) ;
t r y
{
W o r d = w o r d . T o L o w e r I n v a r i a n t ( ) ;
r e t u r n S t e m ( ) ;
}
f i n a l l y
{
I n t e r l o c k e d . D e c r e m e n t ( r e f c o u n t e r ) ;
}
}
p r i v a t e s t r i n g W o r d
{
g e t
{
r e t u r n n e w s t r i n g ( w o r d _ b u f f e r , 0 , S T R _ S I Z E ) ;
}
s e t
{
S e t I n i t S t a t e ( ) ;
S e t W o r d ( v a l u e ) ;
}
}
}
}
/ *
3 * P o r t o f S n o w b a l l s t e m m e r s o n C #
5 * O r i g i n a l s t e m m e r s c a n b e f o u n d o n h t t p : / / s n o w b a l l . t a r t a r u s . o r g
7 * L i c e n c e s t i l l B S D : h t t p : / / s n o w b a l l . t a r t a r u s . o r g / l i c e n s e . p h p
11 * M o s t o f s t e m m e r s a r e p o r t e d f r o m J a v a b y I v e o n i k S y s t e m s l t d . ( w w w . i v e o n i k . c o m )
15 * G e r m a n s t e m m e r
' s p o r t f o u n d o n S o u r c e F o r g e s i t e
19 u s i n g S y s t e m ;
21 u s i n g S y s t e m . C o l l e c t i o n s . G e n e r i c ;
23 u s i n g S y s t e m . T e x t ;
25 u s i n g S y s t e m . T h r e a d i n g ;
29 n a m e s p a c e T r a c e L a b . C o m p o n e n t s . D e v e l o p m e n t K i t . P r e p r o c e s s o r s . S t e m m e r s . S n o w b a l l . L a n g u a g e s
33 / / / < s u m m a r y >
35 / / / G e r m a n l a n g u a g e S n o w b a l l i m p l e m e n t a t i o n
37 / / / < / s u m m a r y >
39 p u b l i c c l a s s G e r m a n S t e m m e r : I S n o w b a l l S t e m m e r
41 / / i n t e r n a l c l a s s S t e m m e r G e r m a n
47 p r i v a t e c h a r [ ] w o r d _ b u f f e r ;
49 p r i v a t e i n t S T R _ S I Z E , R 1 , R 2 ;
51 p r i v a t e i n t B U F F E R _ S I Z E ;
53 p r i v a t e c o n s t i n t I N C = 2 0 ; / / I f o u n d o u t t h i s i s o p t i m a l w o r d s t r i n g s i z e
57 / / / < s u m m a r y >
59 / / / C o n s t r u c t o r
61 / / / < / s u m m a r y >
63 p u b l i c G e r m a n S t e m m e r ( )
67 S e t I n i t S t a t e ( ) ;
73 p r i v a t e v o i d S e t I n i t S t a t e ( )
77 R 1 = R 2 = - 1 ; S T R _ S I Z E = 0 ;
79 B U F F E R _ S I Z E = I N C ;
81 w o r d _ b u f f e r = n u l l ;
83 w o r d _ b u f f e r = n e w c h a r [ B U F F E R _ S I Z E ] ;
89 p r i v a t e v o i d I n c r e m e n t ( )
93 c h a r [ ] t m p _ b u f f e r = w o r d _ b u f f e r ;
95 B U F F E R _ S I Z E + = I N C ;
97 w o r d _ b u f f e r = n e w c h a r [ B U F F E R _ S I Z E ] ;
99 t m p _ b u f f e r . C o p y T o ( w o r d _ b u f f e r , 0 ) ;
101 t m p _ b u f f e r = n u l l ;
109 / / i s c h a r v o w e l
113 * T h e f o l l o w i n g l e t t e r s a r e v o w e l s :
119 p r i v a t e b o o l v o w e l ( c h a r c h )
139 c a s e ' ä ' :
c a s e ' ö ' :
c a s e ' ü ' : r e t u r n t r u e ;
d e f a u l t : r e t u r n f a l s e ;
}
}
/ / R 1 a n d R 2 s e t u p i n t h e s t a n d a r d w a y
p r i v a t e i n t D e f i n e R ( i n t s t a r t )
{
i n t l e n = S T R _ S I Z E ;
i f ( s t a r t = = 0 )
s t a r t = 1 ;
i f ( ( s t a r t < l e n ) & & ( s t a r t > 0 ) )
{
f o r ( i n t i = s t a r t ; i < l e n ; + + i )
{
i f ( ( ! v o w e l ( w o r d _ b u f f e r [ i ] ) ) & & v o w e l ( w o r d _ b u f f e r [ ( i - 1 ) ] ) )
r e t u r n ( ( i - s t a r t ) + s t a r t + 1 ) ;
}
}
r e t u r n - 1 ;
}
p r i v a t e v o i d S e t W o r d ( s t r i n g s t r W o r d )
{
/ / F i r s t , r e p l a c e ß b y s s
s t r i n g t m p = s t r W o r d . R e p l a c e ( " ß " , " s s " ) ;
/ / a d j u s t b u f f e r s i z e
w h i l e ( t m p . L e n g t h > B U F F E R _ S I Z E )
I n c r e m e n t ( ) ;
S T R _ S I Z E = t m p . L e n g t h ;
/ / f i l l i n t o b u f f e r
t m p . C o p y T o ( 0 , w o r d _ b u f f e r , 0 , S T R _ S I Z E ) ;
}
p r i v a t e v o i d C u t E n d ( i n t c o u n t ) { S T R _ S I Z E - = c o u n t ; }
p r i v a t e b o o l E n d s W i t h ( s t r i n g e n d )
{
i f ( S T R _ S I Z E > e n d . L e n g t h )
{
i n t s t o p = S T R _ S I Z E - e n d . L e n g t h - 1 ;
i n t j = e n d . L e n g t h - 1 ;
f o r ( i n t i = ( S T R _ S I Z E - 1 ) ; i > s t o p ; - - i )
{
i f ( w o r d _ b u f f e r [ i ] ! = e n d [ j ] )
r e t u r n f a l s e ;
- - j ;
}
r e t u r n t r u e ;
}
r e t u r n f a l s e ;
}
p r i v a t e v o i d p r e p r o c e s s ( )
{
/ / p u t u a n d y b e t w e e n v o w e l s i n t o u p p e r c a s e
f o r ( i n t i = 1 ; i < S T R _ S I Z E ; + + i )
{
i f ( w o r d _ b u f f e r [ i ] = = ' u ' )
{
i f ( v o w e l ( w o r d _ b u f f e r [ ( i - 1 ) ] ) & & v o w e l ( w o r d _ b u f f e r [ ( i + 1 ) ] ) )
w o r d _ b u f f e r [ i ] = ' U ' ;
}
e l s e i f ( w o r d _ b u f f e r [ i ] = = ' y ' )
{
i f ( v o w e l ( w o r d _ b u f f e r [ ( i - 1 ) ] ) & & v o w e l ( w o r d _ b u f f e r [ ( i + 1 ) ] ) )
w o r d _ b u f f e r [ i ] = ' Y ' ;
}
}
/ *
* R 1 a n d R 2 a r e f i r s t s e t u p i n t h e s t a n d a r d w a y ,
* b u t t h e n R 1 i s a d j u s t e d
* s o t h a t t h e r e g i o n b e f o r e i t c o n t a i n s a t l e a s t 3 l e t t e r s
* /
R 1 = D e f i n e R ( 0 ) ;
R 2 = D e f i n e R ( R 1 ) ;
i f ( ( R 1 < 3 ) & & ( R 1 > - 1 ) )
R 1 = 3 ;
}
/ *
* S e a r c h f o r t h e l o n g e s t a m o n g t h e f o l l o w i n g s u f f i x e s ,
* ( a ) e e m e n e r n e r e s
* ( b ) s ( p r e c e d e d b y a v a l i d s - e n d i n g )
* a n d d e l e t e i f i n R 1 .
* ( O f c o u r s e t h e l e t t e r o f t h e v a l i d s - e n d i n g i s n o t n e c e s s a r i l y i n R 1 )
*
* ( F o r e x a m p l e , ä c k e r n - > ä c k , a c k e r s - > a c k e r , a r m e s - > a r m )
* /
p r i v a t e v o i d S t e p 1 ( )
{
i f ( R 1 < 0 )
r e t u r n ;
/ / e e m e n e r n e r e s
i f ( E n d s W i t h ( " e r n " ) )
{
i f ( ( S T R _ S I Z E - R 1 ) > = 3 )
C u t E n d ( 3 ) ;
}
e l s e i f ( E n d s W i t h ( " e m " ) | | E n d s W i t h ( " e n " ) | | E n d s W i t h ( " e r " ) | | E n d s W i t h ( " e s " ) )
{
i f ( ( S T R _ S I Z E - R 1 ) > = 2 )
C u t E n d ( 2 ) ;
}
e l s e i f ( E n d s W i t h ( " e " ) )
{
i f ( ( S T R _ S I Z E - R 1 ) > = 1 )
C u t E n d ( 1 ) ;
}
/ / b , d , f , g , h , k , l , m , n , r o r t
e l s e i f ( E n d s W i t h ( " b s " ) | | E n d s W i t h ( " d s " ) | | E n d s W i t h ( " f s " ) | |
E n d s W i t h ( " g s " ) | | E n d s W i t h ( " h s " ) | | E n d s W i t h ( " k s " ) | |
E n d s W i t h ( " l s " ) | | E n d s W i t h ( " m s " ) | | E n d s W i t h ( " n s " ) | |
E n d s W i t h ( " r s " ) | | E n d s W i t h ( " t s " ) )
{
i f ( ( S T R _ S I Z E - R 1 ) > = 1 )
C u t E n d ( 1 ) ;
}
}
/ *
* S e a r c h f o r t h e l o n g e s t a m o n g t h e f o l l o w i n g s u f f i x e s ,
* ( a ) e n e r e s t
* ( b ) s t ( p r e c e d e d b y a v a l i d s t - e n d i n g , i t s e l f p r e c e d e d b y a t l e a s t 3 l e t t e r s )
* a n d d e l e t e i f i n R 1 .
*
* ( F o r e x a m p l e , d e r b s t e n - > d e r b s t b y s t e p 1 , a n d d e r b s t - > d e r b b y s t e p 2 , s i n c e b i s a v a l i d s t - e n d i n g , a n d i s p r e c e d e d b y j u s t 3 l e t t e r s )
* /
p r i v a t e v o i d S t e p 2 ( )
{
i f ( R 1 < 0 )
r e t u r n ;
/ / e n e r e s t
i f ( E n d s W i t h ( " e s t " ) )
{
i f ( ( S T R _ S I Z E - R 1 ) > = 3 )
C u t E n d ( 3 ) ;
}
e l s e i f ( E n d s W i t h ( " e n " ) | | E n d s W i t h ( " e r " ) )
{
i f ( ( S T R _ S I Z E - R 1 ) > = 2 )
C u t E n d ( 2 ) ;
}
/ / b , d , f , g , h , k , l , m , n o r t
e l s e i f ( E n d s W i t h ( " b s t " ) | | E n d s W i t h ( " d s t " ) | | E n d s W i t h ( " f s t " ) | |
E n d s W i t h ( " g s t " ) | | E n d s W i t h ( " h s t " ) | | E n d s W i t h ( " k s t " ) | |
E n d s W i t h ( " l s t " ) | | E n d s W i t h ( " m s t " ) | | E n d s W i t h ( " n s t " ) | |
E n d s W i t h ( " t s t " ) )
{
/ / p r e c e d e d b y a t l e a s t 3 l e t t e r s
i f ( S T R _ S I Z E > 5 )
{
i f ( ( S T R _ S I Z E - R 1 ) > = 2 )
C u t E n d ( 2 ) ;
}
}
}
p r i v a t e v o i d S t e p 3 ( )
{
i f ( ( R 2 < 0 ) | | ( R 1 < 0 ) )
r e t u r n ;
/ *
* S e a r c h f o r t h e l o n g e s t a m o n g t h e f o l l o w i n g s u f f i x e s ,
* a n d p e r f o r m t h e a c t i o n i n d i c a t e d .
* e n d u n g
* d e l e t e i f i n R 2
* i f p r e c e d e d b y i g , d e l e t e i f i n R 2 a n d n o t p r e c e d e d b y e
* /
i f ( E n d s W i t h ( " e n d " ) | | E n d s W i t h ( " u n g " ) )
{
i f ( ( S T R _ S I Z E - R 2 ) > = 3 )
C u t E n d ( 3 ) ;
i f ( E n d s W i t h ( " i g " ) & & ( w o r d _ b u f f e r [ ( S T R _ S I Z E - 3 ) ] ! = ' e ' ) )
{
i f ( ( S T R _ S I Z E - R 2 ) > = 2 )
C u t E n d ( 2 ) ;
}
}
/ *
* i g i k i s c h
* d e l e t e i f i n R 2 a n d n o t p r e c e d e d b y e
* /
e l s e i f ( ( E n d s W i t h ( " i g " ) | | E n d s W i t h ( " i k " ) ) & & ( w o r d _ b u f f e r [ ( S T R _ S I Z E - 3 ) ] ! = ' e ' ) )
{
i f ( ( S T R _ S I Z E - R 2 ) > = 2 )
C u t E n d ( 2 ) ;
}
e l s e i f ( E n d s W i t h ( " i s c h " ) & & ( w o r d _ b u f f e r [ ( S T R _ S I Z E - 5 ) ] ! = ' e ' ) )
{
i f ( ( S T R _ S I Z E - R 2 ) > = 4 )
C u t E n d ( 4 ) ;
}
/ *
* l i c h h e i t
* d e l e t e i f i n R 2
* i f p r e c e d e d b y e r o r e n , d e l e t e i f i n R 1
* /
e l s e i f ( E n d s W i t h ( " l i c h " ) | | E n d s W i t h ( " h e i t " ) )
{
C u t E n d ( 4 ) ;
/ / i f p r e c e d e d b y e r o r e n , d e l e t e i f i n R 1
i f ( E n d s W i t h ( " e n " ) | | E n d s W i t h ( " e r " ) )
{
i f ( ( S T R _ S I Z E - R 1 ) > = 2 )
C u t E n d ( 2 ) ;
e l s e
S T R _ S I Z E + = 4 ;
}
e l s e
{
S T R _ S I Z E + = 4 ;
i f ( ( S T R _ S I Z E - R 2 ) > = 4 )
C u t E n d ( 4 ) ;
}
}
/ *
* k e i t
* d e l e t e i f i n R 2
* i f p r e c e d e d b y l i c h o r i g , d e l e t e i f i n R 2
* /
e l s e i f ( E n d s W i t h ( " k e i t " ) )
{
i f ( ( S T R _ S I Z E - R 2 ) > = 4 )
C u t E n d ( 4 ) ;
/ / i f p r e c e d e d b y l i c h o r i g , d e l e t e i f i n R 2
i f ( E n d s W i t h ( " i g " ) )
{
i f ( ( S T R _ S I Z E - R 2 ) > = 2 )
C u t E n d ( 2 ) ;
}
e l s e i f ( E n d s W i t h ( " l i c h " ) )
{
i f ( ( S T R _ S I Z E - R 2 ) > = 4 )
C u t E n d ( 4 ) ;
}
}
}
/ / T u r n U a n d Y b a c k i n t o l o w e r c a s e ,
/ / a n d r e m o v e t h e u m l a u t a c c e n t f r o m a , o a n d u .
p r i v a t e v o i d F i n a l l y ( )
{
f o r ( i n t i = 0 ; i < S T R _ S I Z E ; + + i )
{
s w i t c h ( w o r d _ b u f f e r [ i ] )
{
c a s e ' ä ' :
w o r d _ b u f f e r [ i ] = ' a ' ; b r e a k ;
c a s e ' U ' :
w o r d _ b u f f e r [ i ] = ' u ' ; b r e a k ;
c a s e ' ü ' :
w o r d _ b u f f e r [ i ] = ' u ' ; b r e a k ;
c a s e ' Y ' :
w o r d _ b u f f e r [ i ] = ' y ' ; b r e a k ;
c a s e ' ö ' :
w o r d _ b u f f e r [ i ] = ' o ' ; b r e a k ;
d e f a u l t : b r e a k ;
}
}
}
p r i v a t e s t r i n g S t e m ( )
{
p r e p r o c e s s ( ) ;
S t e p 1 ( ) ;
S t e p 2 ( ) ;
S t e p 3 ( ) ;
F i n a l l y ( ) ;
/ / r e t u r n s t e m e d w o r d
r e t u r n n e w s t r i n g ( w o r d _ b u f f e r , 0 , S T R _ S I Z E ) ;
}
i n t c o u n t e r = 0 ;
/ / / < s u m m a r y >
/ / / S t e m s t e r m s i n t h e i n p u t s t r i n g
/ / / < / s u m m a r y >
/ / / < p a r a m n a m e = " w o r d " > I n p u t s t r i n g < / p a r a m >
/ / / < r e t u r n s > S t e m m e d t e r m s < / r e t u r n s >
p u b l i c s t r i n g S t e m ( s t r i n g w o r d )
{
i f ( c o u n t e r > 0 )
t h r o w n e w E x c e p t i o n ( " G e r m a n s t e m m e r i s n o t r e e n t e r a b l e . C r e a t e n e w i n s t a n c e " ) ;
I n t e r l o c k e d . I n c r e m e n t ( r e f c o u n t e r ) ;
t r y
{
W o r d = w o r d . T o L o w e r I n v a r i a n t ( ) ;
r e t u r n S t e m ( ) ;
}
f i n a l l y
{
I n t e r l o c k e d . D e c r e m e n t ( r e f c o u n t e r ) ;
}
}
p r i v a t e s t r i n g W o r d
{
g e t
{
r e t u r n n e w s t r i n g ( w o r d _ b u f f e r , 0 , S T R _ S I Z E ) ;
}
s e t
{
S e t I n i t S t a t e ( ) ;
S e t W o r d ( v a l u e ) ;
}
}
}
}
' :
141 c a s e ' ö ' :
c a s e ' ü ' : r e t u r n t r u e ;
d e f a u l t : r e t u r n f a l s e ;
}
}
/ / R 1 a n d R 2 s e t u p i n t h e s t a n d a r d w a y
p r i v a t e i n t D e f i n e R ( i n t s t a r t )
{
i n t l e n = S T R _ S I Z E ;
i f ( s t a r t = = 0 )
s t a r t = 1 ;
i f ( ( s t a r t < l e n ) & & ( s t a r t > 0 ) )
{
f o r ( i n t i = s t a r t ; i < l e n ; + + i )
{
i f ( ( ! v o w e l ( w o r d _ b u f f e r [ i ] ) ) & & v o w e l ( w o r d _ b u f f e r [ ( i - 1 ) ] ) )
r e t u r n ( ( i - s t a r t ) + s t a r t + 1 ) ;
}
}
r e t u r n - 1 ;
}
p r i v a t e v o i d S e t W o r d ( s t r i n g s t r W o r d )
{
/ / F i r s t , r e p l a c e ß b y s s
s t r i n g t m p = s t r W o r d . R e p l a c e ( " ß " , " s s " ) ;
/ / a d j u s t b u f f e r s i z e
w h i l e ( t m p . L e n g t h > B U F F E R _ S I Z E )
I n c r e m e n t ( ) ;
S T R _ S I Z E = t m p . L e n g t h ;
/ / f i l l i n t o b u f f e r
t m p . C o p y T o ( 0 , w o r d _ b u f f e r , 0 , S T R _ S I Z E ) ;
}
p r i v a t e v o i d C u t E n d ( i n t c o u n t ) { S T R _ S I Z E - = c o u n t ; }
p r i v a t e b o o l E n d s W i t h ( s t r i n g e n d )
{
i f ( S T R _ S I Z E > e n d . L e n g t h )
{
i n t s t o p = S T R _ S I Z E - e n d . L e n g t h - 1 ;
i n t j = e n d . L e n g t h - 1 ;
f o r ( i n t i = ( S T R _ S I Z E - 1 ) ; i > s t o p ; - - i )
{
i f ( w o r d _ b u f f e r [ i ] ! = e n d [ j ] )
r e t u r n f a l s e ;
- - j ;
}
r e t u r n t r u e ;
}
r e t u r n f a l s e ;
}
p r i v a t e v o i d p r e p r o c e s s ( )
{
/ / p u t u a n d y b e t w e e n v o w e l s i n t o u p p e r c a s e
f o r ( i n t i = 1 ; i < S T R _ S I Z E ; + + i )
{
i f ( w o r d _ b u f f e r [ i ] = = ' u ' )
{
i f ( v o w e l ( w o r d _ b u f f e r [ ( i - 1 ) ] ) & & v o w e l ( w o r d _ b u f f e r [ ( i + 1 ) ] ) )
w o r d _ b u f f e r [ i ] = ' U ' ;
}
e l s e i f ( w o r d _ b u f f e r [ i ] = = ' y ' )
{
i f ( v o w e l ( w o r d _ b u f f e r [ ( i - 1 ) ] ) & & v o w e l ( w o r d _ b u f f e r [ ( i + 1 ) ] ) )
w o r d _ b u f f e r [ i ] = ' Y ' ;
}
}
/ *
* R 1 a n d R 2 a r e f i r s t s e t u p i n t h e s t a n d a r d w a y ,
* b u t t h e n R 1 i s a d j u s t e d
* s o t h a t t h e r e g i o n b e f o r e i t c o n t a i n s a t l e a s t 3 l e t t e r s
* /
R 1 = D e f i n e R ( 0 ) ;
R 2 = D e f i n e R ( R 1 ) ;
i f ( ( R 1 < 3 ) & & ( R 1 > - 1 ) )
R 1 = 3 ;
}
/ *
* S e a r c h f o r t h e l o n g e s t a m o n g t h e f o l l o w i n g s u f f i x e s ,
* ( a ) e e m e n e r n e r e s
* ( b ) s ( p r e c e d e d b y a v a l i d s - e n d i n g )
* a n d d e l e t e i f i n R 1 .
* ( O f c o u r s e t h e l e t t e r o f t h e v a l i d s - e n d i n g i s n o t n e c e s s a r i l y i n R 1 )
*
* ( F o r e x a m p l e , ä c k e r n - > ä c k , a c k e r s - > a c k e r , a r m e s - > a r m )
* /
p r i v a t e v o i d S t e p 1 ( )
{
i f ( R 1 < 0 )
r e t u r n ;
/ / e e m e n e r n e r e s
i f ( E n d s W i t h ( " e r n " ) )
{
i f ( ( S T R _ S I Z E - R 1 ) > = 3 )
C u t E n d ( 3 ) ;
}
e l s e i f ( E n d s W i t h ( " e m " ) | | E n d s W i t h ( " e n " ) | | E n d s W i t h ( " e r " ) | | E n d s W i t h ( " e s " ) )
{
i f ( ( S T R _ S I Z E - R 1 ) > = 2 )
C u t E n d ( 2 ) ;
}
e l s e i f ( E n d s W i t h ( " e " ) )
{
i f ( ( S T R _ S I Z E - R 1 ) > = 1 )
C u t E n d ( 1 ) ;
}
/ / b , d , f , g , h , k , l , m , n , r o r t
e l s e i f ( E n d s W i t h ( " b s " ) | | E n d s W i t h ( " d s " ) | | E n d s W i t h ( " f s " ) | |
E n d s W i t h ( " g s " ) | | E n d s W i t h ( " h s " ) | | E n d s W i t h ( " k s " ) | |
E n d s W i t h ( " l s " ) | | E n d s W i t h ( " m s " ) | | E n d s W i t h ( " n s " ) | |
E n d s W i t h ( " r s " ) | | E n d s W i t h ( " t s " ) )
{
i f ( ( S T R _ S I Z E - R 1 ) > = 1 )
C u t E n d ( 1 ) ;
}
}
/ *
* S e a r c h f o r t h e l o n g e s t a m o n g t h e f o l l o w i n g s u f f i x e s ,
* ( a ) e n e r e s t
* ( b ) s t ( p r e c e d e d b y a v a l i d s t - e n d i n g , i t s e l f p r e c e d e d b y a t l e a s t 3 l e t t e r s )
* a n d d e l e t e i f i n R 1 .
*
* ( F o r e x a m p l e , d e r b s t e n - > d e r b s t b y s t e p 1 , a n d d e r b s t - > d e r b b y s t e p 2 , s i n c e b i s a v a l i d s t - e n d i n g , a n d i s p r e c e d e d b y j u s t 3 l e t t e r s )
* /
p r i v a t e v o i d S t e p 2 ( )
{
i f ( R 1 < 0 )
r e t u r n ;
/ / e n e r e s t
i f ( E n d s W i t h ( " e s t " ) )
{
i f ( ( S T R _ S I Z E - R 1 ) > = 3 )
C u t E n d ( 3 ) ;
}
e l s e i f ( E n d s W i t h ( " e n " ) | | E n d s W i t h ( " e r " ) )
{
i f ( ( S T R _ S I Z E - R 1 ) > = 2 )
C u t E n d ( 2 ) ;
}
/ / b , d , f , g , h , k , l , m , n o r t
e l s e i f ( E n d s W i t h ( " b s t " ) | | E n d s W i t h ( " d s t " ) | | E n d s W i t h ( " f s t " ) | |
E n d s W i t h ( " g s t " ) | | E n d s W i t h ( " h s t " ) | | E n d s W i t h ( " k s t " ) | |
E n d s W i t h ( " l s t " ) | | E n d s W i t h ( " m s t " ) | | E n d s W i t h ( " n s t " ) | |
E n d s W i t h ( " t s t " ) )
{
/ / p r e c e d e d b y a t l e a s t 3 l e t t e r s
i f ( S T R _ S I Z E > 5 )
{
i f ( ( S T R _ S I Z E - R 1 ) > = 2 )
C u t E n d ( 2 ) ;
}
}
}
p r i v a t e v o i d S t e p 3 ( )
{
i f ( ( R 2 < 0 ) | | ( R 1 < 0 ) )
r e t u r n ;
/ *
* S e a r c h f o r t h e l o n g e s t a m o n g t h e f o l l o w i n g s u f f i x e s ,
* a n d p e r f o r m t h e a c t i o n i n d i c a t e d .
* e n d u n g
* d e l e t e i f i n R 2
* i f p r e c e d e d b y i g , d e l e t e i f i n R 2 a n d n o t p r e c e d e d b y e
* /
i f ( E n d s W i t h ( " e n d " ) | | E n d s W i t h ( " u n g " ) )
{
i f ( ( S T R _ S I Z E - R 2 ) > = 3 )
C u t E n d ( 3 ) ;
i f ( E n d s W i t h ( " i g " ) & & ( w o r d _ b u f f e r [ ( S T R _ S I Z E - 3 ) ] ! = ' e ' ) )
{
i f ( ( S T R _ S I Z E - R 2 ) > = 2 )
C u t E n d ( 2 ) ;
}
}
/ *
* i g i k i s c h
* d e l e t e i f i n R 2 a n d n o t p r e c e d e d b y e
* /
e l s e i f ( ( E n d s W i t h ( " i g " ) | | E n d s W i t h ( " i k " ) ) & & ( w o r d _ b u f f e r [ ( S T R _ S I Z E - 3 ) ] ! = ' e ' ) )
{
i f ( ( S T R _ S I Z E - R 2 ) > = 2 )
C u t E n d ( 2 ) ;
}
e l s e i f ( E n d s W i t h ( " i s c h " ) & & ( w o r d _ b u f f e r [ ( S T R _ S I Z E - 5 ) ] ! = ' e ' ) )
{
i f ( ( S T R _ S I Z E - R 2 ) > = 4 )
C u t E n d ( 4 ) ;
}
/ *
* l i c h h e i t
* d e l e t e i f i n R 2
* i f p r e c e d e d b y e r o r e n , d e l e t e i f i n R 1
* /
e l s e i f ( E n d s W i t h ( " l i c h " ) | | E n d s W i t h ( " h e i t " ) )
{
C u t E n d ( 4 ) ;
/ / i f p r e c e d e d b y e r o r e n , d e l e t e i f i n R 1
i f ( E n d s W i t h ( " e n " ) | | E n d s W i t h ( " e r " ) )
{
i f ( ( S T R _ S I Z E - R 1 ) > = 2 )
C u t E n d ( 2 ) ;
e l s e
S T R _ S I Z E + = 4 ;
}
e l s e
{
S T R _ S I Z E + = 4 ;
i f ( ( S T R _ S I Z E - R 2 ) > = 4 )
C u t E n d ( 4 ) ;
}
}
/ *
* k e i t
* d e l e t e i f i n R 2
* i f p r e c e d e d b y l i c h o r i g , d e l e t e i f i n R 2
* /
e l s e i f ( E n d s W i t h ( " k e i t " ) )
{
i f ( ( S T R _ S I Z E - R 2 ) > = 4 )
C u t E n d ( 4 ) ;
/ / i f p r e c e d e d b y l i c h o r i g , d e l e t e i f i n R 2
i f ( E n d s W i t h ( " i g " ) )
{
i f ( ( S T R _ S I Z E - R 2 ) > = 2 )
C u t E n d ( 2 ) ;
}
e l s e i f ( E n d s W i t h ( " l i c h " ) )
{
i f ( ( S T R _ S I Z E - R 2 ) > = 4 )
C u t E n d ( 4 ) ;
}
}
}
/ / T u r n U a n d Y b a c k i n t o l o w e r c a s e ,
/ / a n d r e m o v e t h e u m l a u t a c c e n t f r o m a , o a n d u .
p r i v a t e v o i d F i n a l l y ( )
{
f o r ( i n t i = 0 ; i < S T R _ S I Z E ; + + i )
{
s w i t c h ( w o r d _ b u f f e r [ i ] )
{
c a s e ' ä ' :
w o r d _ b u f f e r [ i ] = ' a ' ; b r e a k ;
c a s e ' U ' :
w o r d _ b u f f e r [ i ] = ' u ' ; b r e a k ;
c a s e ' ü ' :
w o r d _ b u f f e r [ i ] = ' u ' ; b r e a k ;
c a s e ' Y ' :
w o r d _ b u f f e r [ i ] = ' y ' ; b r e a k ;
c a s e ' ö ' :
w o r d _ b u f f e r [ i ] = ' o ' ; b r e a k ;
d e f a u l t : b r e a k ;
}
}
}
p r i v a t e s t r i n g S t e m ( )
{
p r e p r o c e s s ( ) ;
S t e p 1 ( ) ;
S t e p 2 ( ) ;
S t e p 3 ( ) ;
F i n a l l y ( ) ;
/ / r e t u r n s t e m e d w o r d
r e t u r n n e w s t r i n g ( w o r d _ b u f f e r , 0 , S T R _ S I Z E ) ;
}
i n t c o u n t e r = 0 ;
/ / / < s u m m a r y >
/ / / S t e m s t e r m s i n t h e i n p u t s t r i n g
/ / / < / s u m m a r y >
/ / / < p a r a m n a m e = " w o r d " > I n p u t s t r i n g < / p a r a m >
/ / / < r e t u r n s > S t e m m e d t e r m s < / r e t u r n s >
p u b l i c s t r i n g S t e m ( s t r i n g w o r d )
{
i f ( c o u n t e r > 0 )
t h r o w n e w E x c e p t i o n ( " G e r m a n s t e m m e r i s n o t r e e n t e r a b l e . C r e a t e n e w i n s t a n c e " ) ;
I n t e r l o c k e d . I n c r e m e n t ( r e f c o u n t e r ) ;
t r y
{
W o r d = w o r d . T o L o w e r I n v a r i a n t ( ) ;
r e t u r n S t e m ( ) ;
}
f i n a l l y
{
I n t e r l o c k e d . D e c r e m e n t ( r e f c o u n t e r ) ;
}
}
p r i v a t e s t r i n g W o r d
{
g e t
{
r e t u r n n e w s t r i n g ( w o r d _ b u f f e r , 0 , S T R _ S I Z E ) ;
}
s e t
{
S e t I n i t S t a t e ( ) ;
S e t W o r d ( v a l u e ) ;
}
}
}
}
' :
143 c a s e ' ü ' : r e t u r n t r u e ;
d e f a u l t : r e t u r n f a l s e ;
}
}
/ / R 1 a n d R 2 s e t u p i n t h e s t a n d a r d w a y
p r i v a t e i n t D e f i n e R ( i n t s t a r t )
{
i n t l e n = S T R _ S I Z E ;
i f ( s t a r t = = 0 )
s t a r t = 1 ;
i f ( ( s t a r t < l e n ) & & ( s t a r t > 0 ) )
{
f o r ( i n t i = s t a r t ; i < l e n ; + + i )
{
i f ( ( ! v o w e l ( w o r d _ b u f f e r [ i ] ) ) & & v o w e l ( w o r d _ b u f f e r [ ( i - 1 ) ] ) )
r e t u r n ( ( i - s t a r t ) + s t a r t + 1 ) ;
}
}
r e t u r n - 1 ;
}
p r i v a t e v o i d S e t W o r d ( s t r i n g s t r W o r d )
{
/ / F i r s t , r e p l a c e ß b y s s
s t r i n g t m p = s t r W o r d . R e p l a c e ( " ß " , " s s " ) ;
/ / a d j u s t b u f f e r s i z e
w h i l e ( t m p . L e n g t h > B U F F E R _ S I Z E )
I n c r e m e n t ( ) ;
S T R _ S I Z E = t m p . L e n g t h ;
/ / f i l l i n t o b u f f e r
t m p . C o p y T o ( 0 , w o r d _ b u f f e r , 0 , S T R _ S I Z E ) ;
}
p r i v a t e v o i d C u t E n d ( i n t c o u n t ) { S T R _ S I Z E - = c o u n t ; }
p r i v a t e b o o l E n d s W i t h ( s t r i n g e n d )
{
i f ( S T R _ S I Z E > e n d . L e n g t h )
{
i n t s t o p = S T R _ S I Z E - e n d . L e n g t h - 1 ;
i n t j = e n d . L e n g t h - 1 ;
f o r ( i n t i = ( S T R _ S I Z E - 1 ) ; i > s t o p ; - - i )
{
i f ( w o r d _ b u f f e r [ i ] ! = e n d [ j ] )
r e t u r n f a l s e ;
- - j ;
}
r e t u r n t r u e ;
}
r e t u r n f a l s e ;
}
p r i v a t e v o i d p r e p r o c e s s ( )
{
/ / p u t u a n d y b e t w e e n v o w e l s i n t o u p p e r c a s e
f o r ( i n t i = 1 ; i < S T R _ S I Z E ; + + i )
{
i f ( w o r d _ b u f f e r [ i ] = = ' u ' )
{
i f ( v o w e l ( w o r d _ b u f f e r [ ( i - 1 ) ] ) & & v o w e l ( w o r d _ b u f f e r [ ( i + 1 ) ] ) )
w o r d _ b u f f e r [ i ] = ' U ' ;
}
e l s e i f ( w o r d _ b u f f e r [ i ] = = ' y ' )
{
i f ( v o w e l ( w o r d _ b u f f e r [ ( i - 1 ) ] ) & & v o w e l ( w o r d _ b u f f e r [ ( i + 1 ) ] ) )
w o r d _ b u f f e r [ i ] = ' Y ' ;
}
}
/ *
* R 1 a n d R 2 a r e f i r s t s e t u p i n t h e s t a n d a r d w a y ,
* b u t t h e n R 1 i s a d j u s t e d
* s o t h a t t h e r e g i o n b e f o r e i t c o n t a i n s a t l e a s t 3 l e t t e r s
* /
R 1 = D e f i n e R ( 0 ) ;
R 2 = D e f i n e R ( R 1 ) ;
i f ( ( R 1 < 3 ) & & ( R 1 > - 1 ) )
R 1 = 3 ;
}
/ *
* S e a r c h f o r t h e l o n g e s t a m o n g t h e f o l l o w i n g s u f f i x e s ,
* ( a ) e e m e n e r n e r e s
* ( b ) s ( p r e c e d e d b y a v a l i d s - e n d i n g )
* a n d d e l e t e i f i n R 1 .
* ( O f c o u r s e t h e l e t t e r o f t h e v a l i d s - e n d i n g i s n o t n e c e s s a r i l y i n R 1 )
*
* ( F o r e x a m p l e , ä c k e r n - > ä c k , a c k e r s - > a c k e r , a r m e s - > a r m )
* /
p r i v a t e v o i d S t e p 1 ( )
{
i f ( R 1 < 0 )
r e t u r n ;
/ / e e m e n e r n e r e s
i f ( E n d s W i t h ( " e r n " ) )
{
i f ( ( S T R _ S I Z E - R 1 ) > = 3 )
C u t E n d ( 3 ) ;
}
e l s e i f ( E n d s W i t h ( " e m " ) | | E n d s W i t h ( " e n " ) | | E n d s W i t h ( " e r " ) | | E n d s W i t h ( " e s " ) )
{
i f ( ( S T R _ S I Z E - R 1 ) > = 2 )
C u t E n d ( 2 ) ;
}
e l s e i f ( E n d s W i t h ( " e " ) )
{
i f ( ( S T R _ S I Z E - R 1 ) > = 1 )
C u t E n d ( 1 ) ;
}
/ / b , d , f , g , h , k , l , m , n , r o r t
e l s e i f ( E n d s W i t h ( " b s " ) | | E n d s W i t h ( " d s " ) | | E n d s W i t h ( " f s " ) | |
E n d s W i t h ( " g s " ) | | E n d s W i t h ( " h s " ) | | E n d s W i t h ( " k s " ) | |
E n d s W i t h ( " l s " ) | | E n d s W i t h ( " m s " ) | | E n d s W i t h ( " n s " ) | |
E n d s W i t h ( " r s " ) | | E n d s W i t h ( " t s " ) )
{
i f ( ( S T R _ S I Z E - R 1 ) > = 1 )
C u t E n d ( 1 ) ;
}
}
/ *
* S e a r c h f o r t h e l o n g e s t a m o n g t h e f o l l o w i n g s u f f i x e s ,
* ( a ) e n e r e s t
* ( b ) s t ( p r e c e d e d b y a v a l i d s t - e n d i n g , i t s e l f p r e c e d e d b y a t l e a s t 3 l e t t e r s )
* a n d d e l e t e i f i n R 1 .
*
* ( F o r e x a m p l e , d e r b s t e n - > d e r b s t b y s t e p 1 , a n d d e r b s t - > d e r b b y s t e p 2 , s i n c e b i s a v a l i d s t - e n d i n g , a n d i s p r e c e d e d b y j u s t 3 l e t t e r s )
* /
p r i v a t e v o i d S t e p 2 ( )
{
i f ( R 1 < 0 )
r e t u r n ;
/ / e n e r e s t
i f ( E n d s W i t h ( " e s t " ) )
{
i f ( ( S T R _ S I Z E - R 1 ) > = 3 )
C u t E n d ( 3 ) ;
}
e l s e i f ( E n d s W i t h ( " e n " ) | | E n d s W i t h ( " e r " ) )
{
i f ( ( S T R _ S I Z E - R 1 ) > = 2 )
C u t E n d ( 2 ) ;
}
/ / b , d , f , g , h , k , l , m , n o r t
e l s e i f ( E n d s W i t h ( " b s t " ) | | E n d s W i t h ( " d s t " ) | | E n d s W i t h ( " f s t " ) | |
E n d s W i t h ( " g s t " ) | | E n d s W i t h ( " h s t " ) | | E n d s W i t h ( " k s t " ) | |
E n d s W i t h ( " l s t " ) | | E n d s W i t h ( " m s t " ) | | E n d s W i t h ( " n s t " ) | |
E n d s W i t h ( " t s t " ) )
{
/ / p r e c e d e d b y a t l e a s t 3 l e t t e r s
i f ( S T R _ S I Z E > 5 )
{
i f ( ( S T R _ S I Z E - R 1 ) > = 2 )
C u t E n d ( 2 ) ;
}
}
}
p r i v a t e v o i d S t e p 3 ( )
{
i f ( ( R 2 < 0 ) | | ( R 1 < 0 ) )
r e t u r n ;
/ *
* S e a r c h f o r t h e l o n g e s t a m o n g t h e f o l l o w i n g s u f f i x e s ,
* a n d p e r f o r m t h e a c t i o n i n d i c a t e d .
* e n d u n g
* d e l e t e i f i n R 2
* i f p r e c e d e d b y i g , d e l e t e i f i n R 2 a n d n o t p r e c e d e d b y e
* /
i f ( E n d s W i t h ( " e n d " ) | | E n d s W i t h ( " u n g " ) )
{
i f ( ( S T R _ S I Z E - R 2 ) > = 3 )
C u t E n d ( 3 ) ;
i f ( E n d s W i t h ( " i g " ) & & ( w o r d _ b u f f e r [ ( S T R _ S I Z E - 3 ) ] ! = ' e ' ) )
{
i f ( ( S T R _ S I Z E - R 2 ) > = 2 )
C u t E n d ( 2 ) ;
}
}
/ *
* i g i k i s c h
* d e l e t e i f i n R 2 a n d n o t p r e c e d e d b y e
* /
e l s e i f ( ( E n d s W i t h ( " i g " ) | | E n d s W i t h ( " i k " ) ) & & ( w o r d _ b u f f e r [ ( S T R _ S I Z E - 3 ) ] ! = ' e ' ) )
{
i f ( ( S T R _ S I Z E - R 2 ) > = 2 )
C u t E n d ( 2 ) ;
}
e l s e i f ( E n d s W i t h ( " i s c h " ) & & ( w o r d _ b u f f e r [ ( S T R _ S I Z E - 5 ) ] ! = ' e ' ) )
{
i f ( ( S T R _ S I Z E - R 2 ) > = 4 )
C u t E n d ( 4 ) ;
}
/ *
* l i c h h e i t
* d e l e t e i f i n R 2
* i f p r e c e d e d b y e r o r e n , d e l e t e i f i n R 1
* /
e l s e i f ( E n d s W i t h ( " l i c h " ) | | E n d s W i t h ( " h e i t " ) )
{
C u t E n d ( 4 ) ;
/ / i f p r e c e d e d b y e r o r e n , d e l e t e i f i n R 1
i f ( E n d s W i t h ( " e n " ) | | E n d s W i t h ( " e r " ) )
{
i f ( ( S T R _ S I Z E - R 1 ) > = 2 )
C u t E n d ( 2 ) ;
e l s e
S T R _ S I Z E + = 4 ;
}
e l s e
{
S T R _ S I Z E + = 4 ;
i f ( ( S T R _ S I Z E - R 2 ) > = 4 )
C u t E n d ( 4 ) ;
}
}
/ *
* k e i t
* d e l e t e i f i n R 2
* i f p r e c e d e d b y l i c h o r i g , d e l e t e i f i n R 2
* /
e l s e i f ( E n d s W i t h ( " k e i t " ) )
{
i f ( ( S T R _ S I Z E - R 2 ) > = 4 )
C u t E n d ( 4 ) ;
/ / i f p r e c e d e d b y l i c h o r i g , d e l e t e i f i n R 2
i f ( E n d s W i t h ( " i g " ) )
{
i f ( ( S T R _ S I Z E - R 2 ) > = 2 )
C u t E n d ( 2 ) ;
}
e l s e i f ( E n d s W i t h ( " l i c h " ) )
{
i f ( ( S T R _ S I Z E - R 2 ) > = 4 )
C u t E n d ( 4 ) ;
}
}
}
/ / T u r n U a n d Y b a c k i n t o l o w e r c a s e ,
/ / a n d r e m o v e t h e u m l a u t a c c e n t f r o m a , o a n d u .
p r i v a t e v o i d F i n a l l y ( )
{
f o r ( i n t i = 0 ; i < S T R _ S I Z E ; + + i )
{
s w i t c h ( w o r d _ b u f f e r [ i ] )
{
c a s e ' ä ' :
w o r d _ b u f f e r [ i ] = ' a ' ; b r e a k ;
c a s e ' U ' :
w o r d _ b u f f e r [ i ] = ' u ' ; b r e a k ;
c a s e ' ü ' :
w o r d _ b u f f e r [ i ] = ' u ' ; b r e a k ;
c a s e ' Y ' :
w o r d _ b u f f e r [ i ] = ' y ' ; b r e a k ;
c a s e ' ö ' :
w o r d _ b u f f e r [ i ] = ' o ' ; b r e a k ;
d e f a u l t : b r e a k ;
}
}
}
p r i v a t e s t r i n g S t e m ( )
{
p r e p r o c e s s ( ) ;
S t e p 1 ( ) ;
S t e p 2 ( ) ;
S t e p 3 ( ) ;
F i n a l l y ( ) ;
/ / r e t u r n s t e m e d w o r d
r e t u r n n e w s t r i n g ( w o r d _ b u f f e r , 0 , S T R _ S I Z E ) ;
}
i n t c o u n t e r = 0 ;
/ / / < s u m m a r y >
/ / / S t e m s t e r m s i n t h e i n p u t s t r i n g
/ / / < / s u m m a r y >
/ / / < p a r a m n a m e = " w o r d " > I n p u t s t r i n g < / p a r a m >
/ / / < r e t u r n s > S t e m m e d t e r m s < / r e t u r n s >
p u b l i c s t r i n g S t e m ( s t r i n g w o r d )
{
i f ( c o u n t e r > 0 )
t h r o w n e w E x c e p t i o n ( " G e r m a n s t e m m e r i s n o t r e e n t e r a b l e . C r e a t e n e w i n s t a n c e " ) ;
I n t e r l o c k e d . I n c r e m e n t ( r e f c o u n t e r ) ;
t r y
{
W o r d = w o r d . T o L o w e r I n v a r i a n t ( ) ;
r e t u r n S t e m ( ) ;
}
f i n a l l y
{
I n t e r l o c k e d . D e c r e m e n t ( r e f c o u n t e r ) ;
}
}
p r i v a t e s t r i n g W o r d
{
g e t
{
r e t u r n n e w s t r i n g ( w o r d _ b u f f e r , 0 , S T R _ S I Z E ) ;
}
s e t
{
S e t I n i t S t a t e ( ) ;
S e t W o r d ( v a l u e ) ;
}
}
}
}
' : r e t u r n t r u e ;
145 d e f a u l t : r e t u r n f a l s e ;
153 / / R 1 a n d R 2 s e t u p i n t h e s t a n d a r d w a y
155 p r i v a t e i n t D e f i n e R ( i n t s t a r t )
159 i n t l e n = S T R _ S I Z E ;
161 i f ( s t a r t = = 0 )
167 i f ( ( s t a r t < l e n ) & & ( s t a r t > 0 ) )
171 f o r ( i n t i = s t a r t ; i < l e n ; + + i )
175 i f ( ( ! v o w e l ( w o r d _ b u f f e r [ i ] ) ) & & v o w e l ( w o r d _ b u f f e r [ ( i - 1 ) ] ) )
177 r e t u r n ( ( i - s t a r t ) + s t a r t + 1 ) ;
189 p r i v a t e v o i d S e t W o r d ( s t r i n g s t r W o r d )
193 / / F i r s t , r e p l a c e ß b y s s
195 s t r i n g t m p = s t r W o r d . R e p l a c e ( " ß " , " s s " ) ;
197 / / a d j u s t b u f f e r s i z e
199 w h i l e ( t m p . L e n g t h > B U F F E R _ S I Z E )
201 I n c r e m e n t ( ) ;
203 S T R _ S I Z E = t m p . L e n g t h ;
205 / / f i l l i n t o b u f f e r
207 t m p . C o p y T o ( 0 , w o r d _ b u f f e r , 0 , S T R _ S I Z E ) ;
213 p r i v a t e v o i d C u t E n d ( i n t c o u n t ) { S T R _ S I Z E - = c o u n t ; }
217 p r i v a t e b o o l E n d s W i t h ( s t r i n g e n d )
221 i f ( S T R _ S I Z E > e n d . L e n g t h )
225 i n t s t o p = S T R _ S I Z E - e n d . L e n g t h - 1 ;
227 i n t j = e n d . L e n g t h - 1 ;
229 f o r ( i n t i = ( S T R _ S I Z E - 1 ) ; i > s t o p ; - - i )
233 i f ( w o r d _ b u f f e r [ i ] ! = e n d [ j ] )
235 r e t u r n f a l s e ;
241 r e t u r n t r u e ;
245 r e t u r n f a l s e ;
251 p r i v a t e v o i d p r e p r o c e s s ( )
255 / / p u t u a n d y b e t w e e n v o w e l s i n t o u p p e r c a s e
257 f o r ( i n t i = 1 ; i < S T R _ S I Z E ; + + i )
261 i f ( w o r d _ b u f f e r [ i ] = = ' u
' )
265 i f ( v o w e l ( w o r d _ b u f f e r [ ( i - 1 ) ] ) & & v o w e l ( w o r d _ b u f f e r [ ( i + 1 ) ] ) )
267 w o r d _ b u f f e r [ i ] = ' U
' ;
271 e l s e i f ( w o r d _ b u f f e r [ i ] = = ' y
' )
275 i f ( v o w e l ( w o r d _ b u f f e r [ ( i - 1 ) ] ) & & v o w e l ( w o r d _ b u f f e r [ ( i + 1 ) ] ) )
277 w o r d _ b u f f e r [ i ] = ' Y
' ;
285 * R 1 a n d R 2 a r e f i r s t s e t u p i n t h e s t a n d a r d w a y ,
287 * b u t t h e n R 1 i s a d j u s t e d
289 * s o t h a t t h e r e g i o n b e f o r e i t c o n t a i n s a t l e a s t 3 l e t t e r s
293 R 1 = D e f i n e R ( 0 ) ;
295 R 2 = D e f i n e R ( R 1 ) ;
297 i f ( ( R 1 < 3 ) & & ( R 1 > - 1 ) )
307 * S e a r c h f o r t h e l o n g e s t a m o n g t h e f o l l o w i n g s u f f i x e s ,
309 * ( a ) e e m e n e r n e r e s
311 * ( b ) s ( p r e c e d e d b y a v a l i d s - e n d i n g )
313 * a n d d e l e t e i f i n R 1 .
315 * ( O f c o u r s e t h e l e t t e r o f t h e v a l i d s - e n d i n g i s n o t n e c e s s a r i l y i n R 1 )
319 * ( F o r e x a m p l e , ä c k e r n - > ä c k , a c k e r s - > a c k e r , a r m e s - > a r m )
323 p r i v a t e v o i d S t e p 1 ( )
331 / / e e m e n e r n e r e s
333 i f ( E n d s W i t h ( " e r n " ) )
337 i f ( ( S T R _ S I Z E - R 1 ) > = 3 )
343 e l s e i f ( E n d s W i t h ( " e m " ) | | E n d s W i t h ( " e n " ) | | E n d s W i t h ( " e r " ) | | E n d s W i t h ( " e s " ) )
347 i f ( ( S T R _ S I Z E - R 1 ) > = 2 )
353 e l s e i f ( E n d s W i t h ( " e " ) )
357 i f ( ( S T R _ S I Z E - R 1 ) > = 1 )
363 / / b , d , f , g , h , k , l , m , n , r o r t
365 e l s e i f ( E n d s W i t h ( " b s " ) | | E n d s W i t h ( " d s " ) | | E n d s W i t h ( " f s " ) | |
367 E n d s W i t h ( " g s " ) | | E n d s W i t h ( " h s " ) | | E n d s W i t h ( " k s " ) | |
369 E n d s W i t h ( " l s " ) | | E n d s W i t h ( " m s " ) | | E n d s W i t h ( " n s " ) | |
371 E n d s W i t h ( " r s " ) | | E n d s W i t h ( " t s " ) )
375 i f ( ( S T R _ S I Z E - R 1 ) > = 1 )
387 * S e a r c h f o r t h e l o n g e s t a m o n g t h e f o l l o w i n g s u f f i x e s ,
389 * ( a ) e n e r e s t
391 * ( b ) s t ( p r e c e d e d b y a v a l i d s t - e n d i n g , i t s e l f p r e c e d e d b y a t l e a s t 3 l e t t e r s )
393 * a n d d e l e t e i f i n R 1 .
397 * ( F o r e x a m p l e , d e r b s t e n - > d e r b s t b y s t e p 1 , a n d d e r b s t - > d e r b b y s t e p 2 , s i n c e b i s a v a l i d s t - e n d i n g , a n d i s p r e c e d e d b y j u s t 3 l e t t e r s )
401 p r i v a t e v o i d S t e p 2 ( )
411 i f ( E n d s W i t h ( " e s t " ) )
415 i f ( ( S T R _ S I Z E - R 1 ) > = 3 )
421 e l s e i f ( E n d s W i t h ( " e n " ) | | E n d s W i t h ( " e r " ) )
425 i f ( ( S T R _ S I Z E - R 1 ) > = 2 )
431 / / b , d , f , g , h , k , l , m , n o r t
433 e l s e i f ( E n d s W i t h ( " b s t " ) | | E n d s W i t h ( " d s t " ) | | E n d s W i t h ( " f s t " ) | |
435 E n d s W i t h ( " g s t " ) | | E n d s W i t h ( " h s t " ) | | E n d s W i t h ( " k s t " ) | |
437 E n d s W i t h ( " l s t " ) | | E n d s W i t h ( " m s t " ) | | E n d s W i t h ( " n s t " ) | |
439 E n d s W i t h ( " t s t " ) )
443 / / p r e c e d e d b y a t l e a s t 3 l e t t e r s
445 i f ( S T R _ S I Z E > 5 )
449 i f ( ( S T R _ S I Z E - R 1 ) > = 2 )
461 p r i v a t e v o i d S t e p 3 ( )
465 i f ( ( R 2 < 0 ) | | ( R 1 < 0 ) )
471 * S e a r c h f o r t h e l o n g e s t a m o n g t h e f o l l o w i n g s u f f i x e s ,
473 * a n d p e r f o r m t h e a c t i o n i n d i c a t e d .
477 * d e l e t e i f i n R 2
479 * i f p r e c e d e d b y i g , d e l e t e i f i n R 2 a n d n o t p r e c e d e d b y e
483 i f ( E n d s W i t h ( " e n d " ) | | E n d s W i t h ( " u n g " ) )
487 i f ( ( S T R _ S I Z E - R 2 ) > = 3 )
491 i f ( E n d s W i t h ( " i g " ) & & ( w o r d _ b u f f e r [ ( S T R _ S I Z E - 3 ) ] ! = ' e
' ) )
495 i f ( ( S T R _ S I Z E - R 2 ) > = 2 )
507 * d e l e t e i f i n R 2 a n d n o t p r e c e d e d b y e
511 e l s e i f ( ( E n d s W i t h ( " i g " ) | | E n d s W i t h ( " i k " ) ) & & ( w o r d _ b u f f e r [ ( S T R _ S I Z E - 3 ) ] ! = ' e
' ) )
515 i f ( ( S T R _ S I Z E - R 2 ) > = 2 )
521 e l s e i f ( E n d s W i t h ( " i s c h " ) & & ( w o r d _ b u f f e r [ ( S T R _ S I Z E - 5 ) ] ! = ' e
' ) )
525 i f ( ( S T R _ S I Z E - R 2 ) > = 4 )
535 * d e l e t e i f i n R 2
537 * i f p r e c e d e d b y e r o r e n , d e l e t e i f i n R 1
541 e l s e i f ( E n d s W i t h ( " l i c h " ) | | E n d s W i t h ( " h e i t " ) )
547 / / i f p r e c e d e d b y e r o r e n , d e l e t e i f i n R 1
549 i f ( E n d s W i t h ( " e n " ) | | E n d s W i t h ( " e r " ) )
553 i f ( ( S T R _ S I Z E - R 1 ) > = 2 )
559 S T R _ S I Z E + = 4 ;
567 S T R _ S I Z E + = 4 ;
569 i f ( ( S T R _ S I Z E - R 2 ) > = 4 )
581 * d e l e t e i f i n R 2
583 * i f p r e c e d e d b y l i c h o r i g , d e l e t e i f i n R 2
587 e l s e i f ( E n d s W i t h ( " k e i t " ) )
591 i f ( ( S T R _ S I Z E - R 2 ) > = 4 )
595 / / i f p r e c e d e d b y l i c h o r i g , d e l e t e i f i n R 2
597 i f ( E n d s W i t h ( " i g " ) )
601 i f ( ( S T R _ S I Z E - R 2 ) > = 2 )
607 e l s e i f ( E n d s W i t h ( " l i c h " ) )
611 i f ( ( S T R _ S I Z E - R 2 ) > = 4 )
623 / / T u r n U a n d Y b a c k i n t o l o w e r c a s e ,
625 / / a n d r e m o v e t h e u m l a u t a c c e n t f r o m a , o a n d u .
627 p r i v a t e v o i d F i n a l l y ( )
631 f o r ( i n t i = 0 ; i < S T R _ S I Z E ; + + i )
635 s w i t c h ( w o r d _ b u f f e r [ i ] )
639 c a s e ' ä ' :
w o r d _ b u f f e r [ i ] = ' a ' ; b r e a k ;
c a s e ' U ' :
w o r d _ b u f f e r [ i ] = ' u ' ; b r e a k ;
c a s e ' ü ' :
w o r d _ b u f f e r [ i ] = ' u ' ; b r e a k ;
c a s e ' Y ' :
w o r d _ b u f f e r [ i ] = ' y ' ; b r e a k ;
c a s e ' ö ' :
w o r d _ b u f f e r [ i ] = ' o ' ; b r e a k ;
d e f a u l t : b r e a k ;
}
}
}
p r i v a t e s t r i n g S t e m ( )
{
p r e p r o c e s s ( ) ;
S t e p 1 ( ) ;
S t e p 2 ( ) ;
S t e p 3 ( ) ;
F i n a l l y ( ) ;
/ / r e t u r n s t e m e d w o r d
r e t u r n n e w s t r i n g ( w o r d _ b u f f e r , 0 , S T R _ S I Z E ) ;
}
i n t c o u n t e r = 0 ;
/ / / < s u m m a r y >
/ / / S t e m s t e r m s i n t h e i n p u t s t r i n g
/ / / < / s u m m a r y >
/ / / < p a r a m n a m e = " w o r d " > I n p u t s t r i n g < / p a r a m >
/ / / < r e t u r n s > S t e m m e d t e r m s < / r e t u r n s >
p u b l i c s t r i n g S t e m ( s t r i n g w o r d )
{
i f ( c o u n t e r > 0 )
t h r o w n e w E x c e p t i o n ( " G e r m a n s t e m m e r i s n o t r e e n t e r a b l e . C r e a t e n e w i n s t a n c e " ) ;
I n t e r l o c k e d . I n c r e m e n t ( r e f c o u n t e r ) ;
t r y
{
W o r d = w o r d . T o L o w e r I n v a r i a n t ( ) ;
r e t u r n S t e m ( ) ;
}
f i n a l l y
{
I n t e r l o c k e d . D e c r e m e n t ( r e f c o u n t e r ) ;
}
}
p r i v a t e s t r i n g W o r d
{
g e t
{
r e t u r n n e w s t r i n g ( w o r d _ b u f f e r , 0 , S T R _ S I Z E ) ;
}
s e t
{
S e t I n i t S t a t e ( ) ;
S e t W o r d ( v a l u e ) ;
}
}
}
}
' :
641 w o r d _ b u f f e r [ i ] = ' a
' ; b r e a k ;
645 w o r d _ b u f f e r [ i ] = ' u
' ; b r e a k ;
647 c a s e ' ü ' :
w o r d _ b u f f e r [ i ] = ' u ' ; b r e a k ;
c a s e ' Y ' :
w o r d _ b u f f e r [ i ] = ' y ' ; b r e a k ;
c a s e ' ö ' :
w o r d _ b u f f e r [ i ] = ' o ' ; b r e a k ;
d e f a u l t : b r e a k ;
}
}
}
p r i v a t e s t r i n g S t e m ( )
{
p r e p r o c e s s ( ) ;
S t e p 1 ( ) ;
S t e p 2 ( ) ;
S t e p 3 ( ) ;
F i n a l l y ( ) ;
/ / r e t u r n s t e m e d w o r d
r e t u r n n e w s t r i n g ( w o r d _ b u f f e r , 0 , S T R _ S I Z E ) ;
}
i n t c o u n t e r = 0 ;
/ / / < s u m m a r y >
/ / / S t e m s t e r m s i n t h e i n p u t s t r i n g
/ / / < / s u m m a r y >
/ / / < p a r a m n a m e = " w o r d " > I n p u t s t r i n g < / p a r a m >
/ / / < r e t u r n s > S t e m m e d t e r m s < / r e t u r n s >
p u b l i c s t r i n g S t e m ( s t r i n g w o r d )
{
i f ( c o u n t e r > 0 )
t h r o w n e w E x c e p t i o n ( " G e r m a n s t e m m e r i s n o t r e e n t e r a b l e . C r e a t e n e w i n s t a n c e " ) ;
I n t e r l o c k e d . I n c r e m e n t ( r e f c o u n t e r ) ;
t r y
{
W o r d = w o r d . T o L o w e r I n v a r i a n t ( ) ;
r e t u r n S t e m ( ) ;
}
f i n a l l y
{
I n t e r l o c k e d . D e c r e m e n t ( r e f c o u n t e r ) ;
}
}
p r i v a t e s t r i n g W o r d
{
g e t
{
r e t u r n n e w s t r i n g ( w o r d _ b u f f e r , 0 , S T R _ S I Z E ) ;
}
s e t
{
S e t I n i t S t a t e ( ) ;
S e t W o r d ( v a l u e ) ;
}
}
}
}
' :
649 w o r d _ b u f f e r [ i ] = ' u
' ; b r e a k ;
653 w o r d _ b u f f e r [ i ] = ' y
' ; b r e a k ;
655 c a s e ' ö ' :
w o r d _ b u f f e r [ i ] = ' o ' ; b r e a k ;
d e f a u l t : b r e a k ;
}
}
}
p r i v a t e s t r i n g S t e m ( )
{
p r e p r o c e s s ( ) ;
S t e p 1 ( ) ;
S t e p 2 ( ) ;
S t e p 3 ( ) ;
F i n a l l y ( ) ;
/ / r e t u r n s t e m e d w o r d
r e t u r n n e w s t r i n g ( w o r d _ b u f f e r , 0 , S T R _ S I Z E ) ;
}
i n t c o u n t e r = 0 ;
/ / / < s u m m a r y >
/ / / S t e m s t e r m s i n t h e i n p u t s t r i n g
/ / / < / s u m m a r y >
/ / / < p a r a m n a m e = " w o r d " > I n p u t s t r i n g < / p a r a m >
/ / / < r e t u r n s > S t e m m e d t e r m s < / r e t u r n s >
p u b l i c s t r i n g S t e m ( s t r i n g w o r d )
{
i f ( c o u n t e r > 0 )
t h r o w n e w E x c e p t i o n ( " G e r m a n s t e m m e r i s n o t r e e n t e r a b l e . C r e a t e n e w i n s t a n c e " ) ;
I n t e r l o c k e d . I n c r e m e n t ( r e f c o u n t e r ) ;
t r y
{
W o r d = w o r d . T o L o w e r I n v a r i a n t ( ) ;
r e t u r n S t e m ( ) ;
}
f i n a l l y
{
I n t e r l o c k e d . D e c r e m e n t ( r e f c o u n t e r ) ;
}
}
p r i v a t e s t r i n g W o r d
{
g e t
{
r e t u r n n e w s t r i n g ( w o r d _ b u f f e r , 0 , S T R _ S I Z E ) ;
}
s e t
{
S e t I n i t S t a t e ( ) ;
S e t W o r d ( v a l u e ) ;
}
}
}
}
' :
657 w o r d _ b u f f e r [ i ] = ' o
' ; b r e a k ;
659 d e f a u l t : b r e a k ;
669 p r i v a t e s t r i n g S t e m ( )
673 p r e p r o c e s s ( ) ;
683 / / r e t u r n s t e m e d w o r d
685 r e t u r n n e w s t r i n g ( w o r d _ b u f f e r , 0 , S T R _ S I Z E ) ;
691 i n t c o u n t e r = 0 ;
695 / / / < s u m m a r y >
697 / / / S t e m s t e r m s i n t h e i n p u t s t r i n g
699 / / / < / s u m m a r y >
701 / / / < p a r a m n a m e = " w o r d " > I n p u t s t r i n g < / p a r a m >
703 / / / < r e t u r n s > S t e m m e d t e r m s < / r e t u r n s >
705 p u b l i c s t r i n g S t e m ( s t r i n g w o r d )
709 i f ( c o u n t e r > 0 )
711 t h r o w n e w E x c e p t i o n ( " G e r m a n s t e m m e r i s n o t r e e n t e r a b l e . C r e a t e n e w i n s t a n c e " ) ;
713 I n t e r l o c k e d . I n c r e m e n t ( r e f c o u n t e r ) ;
719 W o r d = w o r d . T o L o w e r I n v a r i a n t ( ) ;
721 r e t u r n S t e m ( ) ;
729 I n t e r l o c k e d . D e c r e m e n t ( r e f c o u n t e r ) ;
737 p r i v a t e s t r i n g W o r d
745 r e t u r n n e w s t r i n g ( w o r d _ b u f f e r , 0 , S T R _ S I Z E ) ;
753 S e t I n i t S t a t e ( ) ;
755 S e t W o r d ( v a l u e ) ;